Nous utilisons la ligne de commande pour transmettre les propriétés système à la machine virtuelle Java) lorsque nous exécutons notre Hudson construit sur une machine Linux. Elle fonctionnait plutôt bien dans la version 2.0. Depuis la mise à niveau vers la version 2.1.0, il a complètement cessé de fonctionner.Les propriétés système ne parviennent jamais à atteindre la machine virtuelle Java.
J'ai créé un petit projet de test et en effet cela ne fonctionne pas du tout.
Cela devrait fonctionner correctement 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 fait simplement ceci
assertTrue( System.getProperty("system.test.property") != null);
Je ne pense pas que ce soit un problème dans le plug-in Maven ou Surefire. Sinon, le infaillible se comporte différemment. Il semble que maintenant, lorsque Surefire forge le JVM , ne prendra pas toutes les propriétés système de la JVM parent.
C'est pourquoi vous devez passer les propriétés système de votre choix pour les tests, en utilisant argLine. Donc, les deux devraient fonctionner
mvn2.1 -Dsystem.test.property=test test -DforkMode=never
ou
mvn2.1 test -DargLine="-Dsystem.test.property=test"
J'ai vécu cela avec le plug-in Surefire . Le plug-in Surefire est exécuté sous une autre instance JVM lancée par Maven. Les paramètres de ligne de commande sont configurables sous la configuration 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>
Veillez à ne pas confondre le fichier de configuration avec les arguments de ligne de commande. Le fichier de configuration (pom.xml) remplace tous les arguments cmd. Donc, ne configurez pas le plugin surefire dans pom.xml si vous voulez le passer à travers la ligne de commande comme l'explique raisercostin.