2009-05-05 8 views
38

Usiamo la riga di comando per passare le proprietà di sistema alla macchina virtuale Java quando eseguiamo i nostri build Hudson su una macchina Linux. Ha usato per funzionare abbastanza bene in 2.0.9 da quando abbiamo aggiornato a 2.1.0 ha smesso di funzionare del tutto. Le proprietà di sistema non lo rendono mai alla macchina virtuale Java.Maven 2.1.0 non passa le proprietà di sistema alla macchina virtuale Java

Ho creato un piccolo progetto di test e in effetti non funziona affatto.

Questo dovrebbe funzionare bene con Maven 2.0.9:

mvn2.0.9 -Dsystem.test.property=test test 

Ma questo fallirà:

mvn2.1 -Dsystem.test.property=test test 

Il codice Java fa semplicemente questo

assertTrue(System.getProperty("system.test.property") != null); 

risposta

52

I don' Penso che questo sia un problema nel plug-in Maven o Surefire. Altrimenti l'infallibile si sta comportando in modo diverso. Sembra che ora, quando Surefire si appoggia allo JVM, non prenderà tutte le proprietà di sistema dalla JVM principale.

Ecco perché è necessario passare le proprietà di sistema desiderate per i test, utilizzando argLine. Così, entrambi questi dovrebbero lavorare

mvn2.1 -Dsystem.test.property=test test -DforkMode=never 

o

mvn2.1 test -DargLine="-Dsystem.test.property=test" 
+0

"argLine" era proprio quello che stavo cercando! Grazie molto! – armandino

+0

sorprendentemente per Locale.getDefault() questi hanno lavorato prova mvn -DargLine = "- Duser.language = de -Duser.region = DE" e non il test mvn -DargLine = "- Dsystem.user.language = de - Dsystem.user.region = DE " – bibstha

+3

Nota: che vor maven 3 usi semplicemente' mvn -Dsystem.test.property = test test'. Maven diffonde la proprietà ai test. – BetaRide

12

ho sperimentato questo con il plug-in Surefire. Il plug-in Surefire viene eseguito con un'istanza JVM diversa lanciata da Maven. I parametri della riga di comando sono configurabili sotto la configurazione del plugin surefile nel tuo pom.xml. Ecco un esempio della nostra configurazione.

 <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-surefire-plugin</artifactId> 
      <version>2.4.3</version> 
      <!-- 
        By default, the Surefire Plugin will automatically include all test classes with the following wildcard patterns: 
        "**/Test*.java" - includes all of its subdirectory and all java filenames that start with "Test". "**/*Test.java" - 
        includes all of its subdirectory and all java filenames that end with "Test". "**/*TestCase.java" - includes all of 
        its subdirectory and all java filenames that end with "TestCase". 
       --> 
      <configuration> 
       <includes> 
        <include>**/*Test.java</include> 
       </includes> 
       <systemProperties> 
        <property> 
         <name>app.env</name> 
         <value>dev</value> 
        </property> 
        <property> 
         <name>oracle.net.tns_admin</name> 
         <value>${oracle.net.tns_admin}</value> 
        </property> 
       </systemProperties> 
      </configuration> 
     </plugin> 
+4

Al giorno d'oggi usare invece di . Vedi http://maven.apache.org/plugins/maven-surefire-plugin/examples/system-properties.html –

+0

Ho provato questo e $ {...} non sembra essere sostituito con la proprietà valore passato a Maven ... – thecoop

+0

@thecoop - non so quale sia il problema, potrebbe essere un errore ortografico da qualche parte, ma questo ha funzionato abbastanza bene per me. –

2

Fare attenzione a non confondere il file di configurazione con gli argomenti della riga di comando. Il file di configurazione (pom.xml) sovrascrive tutti gli argomenti cmd. Quindi non configurare il plugin surefire all'interno di pom.xml se vuoi passarlo attraverso la riga di comando come spiegato da raisercostin.