2014-01-28 4 views
38

Ich habe aa Java-Programm geben, die eine SystemeigenschaftWie Systemeigenschaft zu meinem Test über Gradle und -D

System.getProperty("cassandra.ip"); 

und ich habe mit

lesen
gradle test -Pcassandra.ip=192.168.33.13 
-Datei, die ich beginne eine Gradle bauen

oder

gradle test -Dcassandra.ip=192.168.33.13 

jedoch System.getProperty immer RETU rn null.

Der einzige Weg, ich war gefunden, dass Build-Datei in meinem Gradle über

test { 
    systemProperty "cassandra.ip", "192.168.33.13" 
} 

hinzufügen Wie kann ich tun es über -D

+1

Was passiert, wenn Sie 'gradle -Dcassandra.ip = 192.168. 33.13'? Auf jeden Fall gibt die Testaufgabe eine oder mehrere neue JVMs ab. Sie müssen also Eigenschaften explizit übergeben. Niemand zwingt Sie jedoch, ihren Wert im Build fest zu codieren. –

+0

Werfen Sie auch einen Blick auf diese Antwort: https://stackoverflow.com/questions/23689054/problems-passing-system-properties-and-parameters-when-running-java-class-via-gr/23689696#23689696 – IgalS

Antwort

43

Die -P für gradle Eigenschaften ist, und die - D-Flag ist für JVM-Eigenschaften. Da der Test in einer neuen JVM gegabelt werden kann, wird das an Gradle übergebene -D-Argument nicht an den Test weitergegeben. Es hört sich so an, als wäre es das Verhalten, das Sie sehen.

Sie können die systemProperty in Ihrem test Block verwenden, wie Sie getan haben, aber es auf der eingehenden gradle Eigenschaft stützen, indem sie es mit ihm vorbei -P:

test { 
    systemProperty "cassandra.ip", project.getProperty("cassandra.ip") 
} 

oder alternativ, wenn Sie es sind vorbei in über -D

test { 
    systemProperty "cassandra.ip", System.getProperty("cassandra.ip") 
} 
17

kam in diesem sehr Problem, außer ich möchte alle Eigenschaften auf der Kommandozeile im gradle Skript wieder gegeben nicht auflisten. i daher alle Systemeigenschaften zu meinem Test sende

task integrationTest(type: Test) { 
    useTestNG() 
    options { 
     systemProperties(System.getProperties()) 
    } 
} 
4

hatte ich einen Fall, wo ich mehr Systemeigenschaften in den Test JVM passieren benötigen aber nicht all (wollte nicht in irrelevanten passieren) . Basierend auf den obigen Antworten und subMap mit Hilfe diejenigen zu filtern, die ich brauchte, ist das für mich:

task integrationTest(type: Test) { 
    // ... Do stuff here ... 
    systemProperties System.getProperties().subMap(['PROP1', 'PROP2']) 
} 

In diesem Beispiel nur PROP1 und PROP2 wird in weitergegeben werden, wenn sie in gradle JVM vorhanden sein.

2

Hier ist eine Variante, die zahlreiche Projekteigenschaften an die Test-JVM als Systemeigenschaften übergibt. Ich bevorzuge Projekteigenschaften über Systemeigenschaften, um die Flexibilität zu erhöhen.

task intTest(type: Test) { 
    systemProperties project.properties.subMap(["foo", "bar"]) 
} 

, die auf der Kommandozeile übergeben werden können:

$ gradle intTest -Pfoo=1 -Pbar=2 

Und in Ihrem Test Introduction:

String foo = System.getProperty("foo"); 
Verwandte Themen