Maven 2.1.0 ne transmet pas les propriétés système à la machine virtuelle Java
-
05-07-2019 - |
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);
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.