2015-09-01 10 views
8

eine lein Aufgabe starten (eigentlich Test, die mit dem standardmäßig läuft: Test Profil). Was ich möchte ist, tun beginnen mit dem Äquivalent vonGibt es eine Möglichkeit Systemeigenschaften in leinegen zu setzen?

java -Dproperty1 = Wert -Dproperty2 = Wert2 Aufgabe

Es gibt einige Referenzen im Web, dass dies vorschlagen sollte gut funktionieren wie dies:

project.clj:

... 
:profiles {:test {:jvm-opts ["-Dproperty1=value" "-Dproperty2-value"]}} 

Dies ist in meinem Test-Läufer ignoriert. Das Profil ist richtig, wenn ich einige tatsächliche Jvm args einfügen (z etwas wie „-XX: + PrintGC“) es funktioniert gut. Scheint aber nicht die Systemeigenschaften aufzunehmen. Gibt es einen richtigen Weg, dies zu tun?

Antwort

1

Wir verwenden environ für diesen Zweck.

Sobald Sie das Plugin installieren, alles, was Sie tun müssen, ist eine Datei .lein-env in Ihrem Projekt Wurzel Karte von Umgebungsvariablen erstellen enthalten, eingestellt werden, wie zB: im Code

{ 
    :s3-access-key  "some key" 
    :s3-secret-key  "some secret" 
} 

Dann, Sie verwenden können:

(require '[environ.core :refer [env]]) 
(env :s3-access-key) ;; "some key" 

Dieser mir Punkt läßt zu, sagt sie, Stub-Server in Test aber das Eigentliche in der Produktion als environ die Systemumgebungsvariablen verwenden, wenn keine .lein-env vorgesehen ist.

Ich hoffe, das hilft.

+0

Danke, ich habe das gesehen, nicht ganz das, was ich brauche - ich führe einige Tests durch, die unter anderem einen Guice-Container enthalten, der aus der Laufzeitumgebung liest, wenn er instanziiert wird ist möglich aber ungeschickt. Es wäre viel schöner, in lein nur konfigurieren zu können, aber +1 für den Tipp. Vielen Dank. –

+0

Dies setzt technisch keine Java-Eigenschaften. Sie können nur die Konfiguration aus der Umgebung lesen, die möglicherweise nicht Ihren Anforderungen entspricht (z. B. wenn Sie eine Bibliothek verwenden, die Java-Eigenschaften verwendet). –

2

eine Antwort gefunden, für alle anderen, die kämpfen mit diesem ist:

Da ich Umgebungseigenschaften injizieren erforderlich, bevor ich den Prozess gestartet hat, habe ich die folgenden:

fügen Sie das shell Plugin auf Ihre project.clj:

: plugins [[lein-shell "0.4.1"]]

und dann eine prep Aufgabe zu Ihrem Profil hinzufügen. Aber es gibt eine Falte - Sie würden denken, dass Sie dies tun könnte:

:profiles {:test {:prep-tasks [["shell" "export" "foo=bar"]]}} 

Aber das funktioniert nicht, wie Shell nicht den Exportbefehl nicht sehen - sie erhalten „keine solche Datei“, da es Teil bash und es gibt keine ausführbare Datei namens "export". Also habe ich ein Skript namens „setenv.sh“ und rannte dass von Shell:

:profiles {:test {:prep-tasks [["shell" "./test/setenv.sh"]]}} 

Edit: tatsächlich funktioniert dies nicht, werden die Variablen nicht auf die subprocess übertragen. Habe es hier gelassen, weil es für jemanden nützlich sein könnte, wie es ist.

Edit: hatte eigentlich ein Shell-Skript zu erstellen, die den Export aufruft und dann läuft lein. Definitiv nicht die eleganteste Lösung.

Verwandte Themen