Maven 2.1.0没有将系统属性传递给Java虚拟机

时间:2009-05-05 09:13:22

标签: maven-2 jvm maven-plugin surefire system-properties

我们使用命令行将系统属性传递给Java 在Linux机器上运行我们的Hudson构建时的虚拟机。它用了 自从我们升级到2.1.0后,在2.0.9中工作得很好 完全停止了工作。系统属性永远不会成功 到Java虚拟机。

我创建了一个小型测试项目,实际上根本不起作用。

使用Maven 2.0.9:

可以正常工作
mvn2.0.9 -Dsystem.test.property=test test 

但这会失败:

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

Java代码只是这样做

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

3 个答案:

答案 0 :(得分:52)

我不认为这是Maven或Surefire插件中的问题。否则,万不得已表现出不同的表现。现在看来,当Surefire分叉JVM时,不会从父JVM获取所有系统属性。

这就是为什么你应该使用argLine传递你想要的任何系统属性进行测试。 所以,这两个都应该工作

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

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

答案 1 :(得分:12)

我使用Surefire插件体验过这一点。 Surefire插件在Maven启动的不同JVM实例下运行。命令行参数可以在pom.xml中的surefile-plugin配置下配置。以下是我们配置的示例。

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

答案 2 :(得分:2)

注意不要将配置文件与命令行参数混淆。配置文件(pom.xml)覆盖所有cmd参数。因此,如果您想通过命令行传递它,请不要在pom.xml中配置surefire插件,如raisercostin解释的那样。