2015-09-01 7 views
8

far partire un processo Lein (in realtà prova, che corre per default con il : profilo di prova). Quello che mi piacerebbe fare è iniziare con l'equivalente diC'è un modo per impostare le proprietà di sistema in leinegen?

java -Dproperty1 = valore -Dproperty2 = compito valore2

Ci sono alcuni riferimenti sul web che suggeriscono che questo dovrebbe funzionare bene così questo:

project.clj:

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

questo viene ignorato nel mio test runner. Il profilo è corretto, se inserisco alcuni argomenti jvm reali (ad esempio qualcosa come "-XX: + PrintGC") funziona correttamente. Ma non sembra raccogliere le proprietà del sistema. C'è un modo corretto per farlo?

risposta

1

Noi usiamo environ proprio per quello scopo.

Una volta installato il plugin, tutto quello che dovete fare è creare un file .lein-env nella root del progetto che contiene una mappa di variabili d'ambiente da impostare, come ad esempio:

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

Poi, nel codice, è possibile utilizzare:

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

Questo mi permette di punto, per esempio, il server stub nel test, ma la cosa reale in produzione come environ useranno le variabili d'ambiente di sistema se non .lein-env è fornito.

Spero che questo aiuti.

+0

Grazie, ho visto questo, non proprio la cosa di cui ho bisogno - Sto eseguendo alcuni test che includono, tra le altre cose, un contenitore di guizzi che legge dall'ambiente di runtime quando viene istanziato, quindi inseriscilo nella fonte è possibile ma maldestro. Sarebbe molto più bello essere in grado di configurare solo in lein, ma +1 per il suggerimento. Grazie. –

+0

Questo tecnicamente non imposta le proprietà Java. Ti consente solo di leggere la configurazione da environ, che potrebbe non essere quello che ti serve (ad es. Se usi una libreria che consuma le proprietà java). –

2

trovato una risposta, per chiunque altro che sta lottando con questo:

Da quando ho avuto bisogno di iniettare proprietà dell'ambiente prima ho iniziato il processo, ho fatto la seguente:

aggiungere il plugin shell al vostro project.clj:

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

e quindi aggiungere un compito di preparazione al tuo profilo. Ma c'è una grinza - si potrebbe pensare che si potrebbe fare questo:

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

Ma questo non funziona, come shell non vedere il comando export - si ottiene "No such file", dal momento che è parte di bash e non esiste un file eseguibile chiamato "export". Così ho creato uno script chiamato "setenv.sh" e corse che da shell:

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

Edit: in realtà questo non funziona, le variabili non sono riportate al sottoprocesso. Lasciato qui perché potrebbe essere utile a qualcuno così com'è.

Modifica: in realtà doveva creare uno script di shell che richiama l'esportazione e quindi esegue lein. Sicuramente non la soluzione più elegante.

Problemi correlati