Buduję aplikację dla raspberry pi i używam pi4j jako zależności dla Software PWM na GPIO. Chciałbym przetestować mój kod na moim komputerze lokalnym, więc chciałbym skompilować mój kod bez zależności pi4j i pominąć wywołania metody do biblioteki.Kompilacja warunkowa dla test/deploy kompilacji z raspberry pi
Przykład Kod:
(ns led-server.model
(:require [clojure.tools.logging :as log])
(:import [com.pi4j.wiringpi SoftPwm Gpio])) ;; pi4j dependency, only compiles on rPi
(defn- soft-pwm-write [pin value]
(let [ival (Math/round (double (* value RANGE)))]
(SoftPwm/softPwmWrite pin ival) ;; call to pi4j. This is what I want to skip
(log/info "pin" pin "set to" ival))
)
pi4j wymaga biblioteki wiringPi C, która jest dostępna tylko w pi malinową (co ma sens). Do testowania na mojej maszynie dev wystarczy wydruk dziennika. Nie chcę komentować :import
i metod wywoływania testów, chciałbym bardziej eleganckiego rozwiązania.
Ok porządek, to wygląda na to, że może działać. Wspomniałeś, że kompilacja warunkowa może nie być właściwym sposobem rozwiązania tego problemu; co byś zamiast tego zaproponował? – quantumbyte
W czasie wykonywania można zdecydować, czy załadować klasę Pi i, jeśli trzeba, zrobić coś takiego jak (-> "com.pi4j.wiringpi.SoftPwm" Class/forName (.getMethod "softPwmWrite" arg-types) (.invoke zero pin vals)). Jeśli nie wykonasz tego kodu, klasa Pi nie zostanie załadowana. Nie: importuj. –
OK dzięki, zobaczę, co pasuje lepiej, druga opcja nie wydaje się jednak czystsza. – quantumbyte