2016-03-31 4 views
16

Ich versuche, eine Umgebungsvariable von meinem Gradle-Build festzulegen. Ich bin auf MacOS X (El Capitan). Der Befehl ist "Grapple Test".Legen Sie eine Umgebungsvariable aus einem Gradle-Build

Ich versuche, dies in meinem build.gradle:

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

und die Erstellung fehl:

Ausführung für Aufgabe fehlgeschlagen ': myproject: setenv'.

ist ein Problem aufgetreten 'Befehl 'Prozess starten Export''

ich dies auch versucht:

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

Der Build erfolgreich ist. Allerdings, wenn ich die Umgebungsvariable in meinem JUnit-Test überprüft Sie es nicht:

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

Gibt es eine Möglichkeit, eine Umgebungsvariable von einem Gradle einzustellen (in der build.gradle Datei) bauen?

Update:

ich es in Isolation getestet haben: die Werte noch übergeben bekommen und meine Testaufgabe erhält alles, sei es ein systemProperty, Umgebungsvariablen oder jvmArgs.

Also, es ist nichts falsch mit Gradle selbst hier.

Das Problem entsteht, wenn ich es auf dem realen Projekt versuche. Es verwendet Spring für die Abhängigkeitsinjektion. Ich mag mich irren, aber es sieht so aus, als ob das Spring-Framework diese Werte irgendwo löscht.

Dieses Teilprojekt wird gerade eingefroren und ich kann meine Schätzung jetzt nicht im Detail überprüfen.

+0

Another failed Experiment: 'test { systemProperty 'SOME_TEST_VAR', 'aaa' Umwelt 'SOME_TEST_VAR', 'aaa' }' und im Test: 'boolean gut = System.getenv(). ContainsKey (" SOME_TEST_VAR ") || System.getProperties(). ContainsKey ("SOME_TEST_VAR"); assertTrue (gut); ' – user3791111

+0

Ich kann hier keine Zeilenumbrüche machen, selbst nachdem ich die Hilfe gelesen habe. Entschuldige, ich vermute nur, wo ich sie machen wollte. – user3791111

+0

Sie sollten Ihre Frage bearbeiten, wenn Sie mehr Informationen zur Verfügung stellen möchten. –

Antwort

15

Für eine Testaufgabe, können Sie die environment property wie folgt verwenden:

test { 
    environment "VAR", "val" 
} 

Sie auch die environment property in einer exec Aufgabe verwenden können

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

Beachten Sie, dass mit dieser Methode die Umgebungsvariablen sind nur während der Aufgabe festgelegt.

+3

Dinge wie "Umgebung", "jvmArgs" und "systemProperties" werden für die "Test" Aufgabe ignoriert. Ich versuche verzweifelt zu verstehen warum. Ich weiß, dass der Test in einer separaten JVM ausgeführt wird - dann sollte zumindest "jvmArgs" funktionieren, aber es funktioniert nicht. – user3791111

+0

Sie können auch die Klasse [JavaExec] (https://docs.gradle.org/current/javadoc/org/gradle/api/tasks/JavaExec.html) verwenden, wenn Sie die JVM nur aufteilen möchten. – Stuporman

1

Sie können auch „prepend“ die Umgebungsvariable Einstellung von ‚Umwelt‘ Befehl:

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

Dieses ist für Einstellungen Umgebungsvariable für den Test-Plugin für mich arbeitet

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