2016-03-31 16 views
16

Sto provando a impostare una variabile di ambiente dalla mia build Gradle. Sono su MacOS X (El Capitan). Il comando è "gradle test".imposta una variabile di ambiente da una build Gradle

sto cercando questo nel mio build.gradle:

task setenv(type: Exec) { 
    commandLine "export", "SOME_TEST_VAR=aaa" 
} 
test.dependsOn setenv 

e la compilazione fallisce:

Esecuzione non riuscita per l'attività ': myproject: setenv'.

è verificato un problema di partenza 'comando 'processo di esportazione''

Ho provato anche questo:

test.doFirst { 
    ProcessBuilder pb1 = new ProcessBuilder("export SOME_TEST_VAR=some test value") 
    pb1.start(); 
} 

La build riesce. Tuttavia, se controllo la variabile d'ambiente nel mio test JUnit non riesce:

assertTrue(System.getenv().containsKey("SOME_TEST_VAR")); 

C'è un modo per impostare una variabile d'ambiente da un Gradle costruire (nel file build.gradle)?

Aggiornamento:

ho provato in modo isolato: i valori non viene passato e il mio compito di prova riceve tutto, sia esso uno systemProperty, variabili d'ambiente o jvmArgs.

Quindi, non c'è niente di sbagliato con Gradle stesso qui.

Il problema sorge quando lo sto provando sul progetto reale. Usa Spring per l'iniezione di dipendenza. Potrei sbagliarmi, ma sembra che il quadro di primavera elimini quei valori da qualche parte.

Questo sottoprogetto è attualmente bloccato e non riesco a verificare la mia ipotesi in dettaglio in questo momento.

+0

un altro fallito esperimento: 'test { systemProperty 'SOME_TEST_VAR', 'aaa' ambiente 'SOME_TEST_VAR', 'aaa' }' e nel test: 'booleano buono = System.getenv(). ContainsKey (" SOME_TEST_VAR ") || System.getProperties() containsKey ("SOME_TEST_VAR."); assertTrue (buono); ' – user3791111

+0

Non riesco a far funzionare le interruzioni di riga qui anche dopo aver letto l'aiuto. Scusa, assumiamo semplicemente dove intendevo farli. – user3791111

+0

Dovresti modificare la tua domanda, se hai altre informazioni da fornire. –

risposta

15

Per un compito di prova, è possibile utilizzare il environment property come questo:

test { 
    environment "VAR", "val" 
} 

è anche possibile utilizzare il environment property in un task exec

task dropDatabase(type: Exec) { 
    environment "VAR", "val" 
    commandLine "doit" 
} 

Si noti che con questo metodo le variabili di ambiente sono imposta solo durante l'attività.

+3

Cose come "ambiente", "jvmArgs" e "systemProperties" vengono ignorate per l'attività "test". Sto cercando disperatamente di capire perché. So che il test viene eseguito in una JVM separata, quindi almeno "jvmArgs" dovrebbe funzionare ma non lo è. – user3791111

+0

È anche possibile utilizzare la classe [JavaExec] (https://docs.gradle.org/current/javadoc/org/gradle/api/tasks/JavaExec.html) se si desidera eseguire il fork della JVM. – Stuporman

1

È possibile anche l'ambiente impostazione variabile utilizzando il comando 'ambiente' "anteporre":

run.doFirst { environment 'SPARK_LOCAL_IP', 'localhost' } 
2

Questo sta lavorando per me per la variabile ambiente impostazioni per il plugin di prova

test { 
    systemProperties = [ 
     'catalina.home': 'c:/test' 
    ] 
    println "Starting Tests" 
    beforeTest { descriptor -> 
     logger.lifecycle("Running test: " + descriptor)     
    }  
} 
Problemi correlati