Question

Nous utilisons la ligne de commande pour transmettre les propriétés système à Java. machine virtuelle lors de l’exécution de notre Hudson est construit sur une machine Linux. Cela à utilisé de travailler assez bien en 2.0.9 depuis que nous avons mis à jour à la version 2.1.0, il a cessé de travailler tout à fait. Les propriétés du système ne le font jamais à la machine virtuelle Java.

J'ai créé un petit projet test et il ne fonctionne pas du tout.

Cela devrait fonctionner parfaitement avec Maven 2.0.9:

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

Mais cela échouera:

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

Le code Java le fait simplement

assertTrue( System.getProperty("system.test.property") != null); 
Était-ce utile?

La solution

Je ne pense pas que ce soit un problème dans les plug-ins Maven ou Surefire. Sinon le surefire se comporte différemment. Il semble que maintenant, lorsque Surefire lance la JVM , toutes les propriétés système ne seront pas reprises du parent. JVM.

C'est pourquoi vous devez transmettre les propriétés système souhaitées pour les tests, à l'aide d'argLine. Donc, les deux devraient fonctionner

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

ou

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

Autres conseils

Je l'ai expérimenté avec le plug-in Surefire . Le plug-in Surefire est exécuté sous une autre instance de machine virtuelle Java lancée par Maven. Les paramètres de ligne de commande sont configurables dans la configuration de surefile-plugin dans votre pom.xml. Voici un exemple de notre configuration.

        <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>

Faites attention à ne pas mélanger le fichier de configuration avec les arguments de la ligne de commande. Le fichier de configuration (pom.xml) remplace tous les arguments de cmd. Donc, ne configurez pas le plugin surefire dans pom.xml si vous voulez le faire passer en ligne de commande, comme l'explique raisercostin.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top