web-dev-qa-db-fra.com

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

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); 
38
raisercostin

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"
53
raisercostin

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>
12
Mike Pone

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.

2
bogdandrags