38 votes

Maven 2.1.0 ne transmet pas les propriétés système à la machine virtuelle Java

Nous utilisons la ligne de commande pour passer sur les propriétés du système pour le Java la machine virtuelle lors de l'exécution de notre Hudson s'appuie sur une machine Linux. Il a utilisé très bien fonctionner dans 2.0.9 depuis que nous avons mis à niveau à la 2.1.0 il a complètement arrêté de travailler. Le système de propriétés qui ne le font jamais pour la machine virtuelle Java.

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

Cela devrait fonctionner très bien avec Maven 2.0.9:

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

Mais cela ne fonctionne pas:

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

Le code Java n'est tout simplement ce

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

53voto

raisercostin Points 1489

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 divulguera la JVM , toutes les propriétés système ne seront pas extraites de la JVM parente.

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"
 

12voto

Mike Pone Points 4840

J'ai expérimenté cela 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>
 

2voto

bogdandrags Points 11

Veillez à 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 expliqué par raisercostin.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X