Domanda

Usiamo la riga di comando per passare le proprietà di sistema a Java macchina virtuale durante l'esecuzione delle nostre Hudson su una macchina Linux. Ha usato per funzionare abbastanza bene in 2.0.9 da quando abbiamo aggiornato a 2.1.0 che ha smesso di funzionare del tutto. Le proprietà del sistema non ce la fanno mai 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 lo fa semplicemente

assertTrue( System.getProperty("system.test.property") != null); 
È stato utile?

Soluzione

Non penso che questo sia un problema nel plug-in Maven o Surefire. Altrimenti il ??fuoco sicuro si sta comportando diversamente. Sembra che ora, quando Surefire esegue il fork di JVM , non prenderà tutte le proprietà del sistema dal genitore JVM.

Ecco perché dovresti passare qualsiasi proprietà di sistema desideri per i test, usando argLine. Quindi, entrambi dovrebbero funzionare

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

o

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

Altri suggerimenti

L'ho sperimentato con il Surefire . Il plug-in Surefire viene eseguito in un'altra istanza JVM che viene avviata da Maven. I parametri della riga di comando sono configurabili nella configurazione del plugin surefile in 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>

Fare attenzione a non confondere il file di configurazione con gli argomenti della riga di comando. Il file di configurazione (pom.xml) ha la precedenza su tutti gli argomenti cmd. Quindi non configurare il plugin surefire in pom.xml se vuoi passarlo attraverso la riga di comando come spiegato raisercostin.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top