web-dev-qa-db-ja.com

Maven 2.1.0がシステムプロパティをJava仮想マシンに渡さない

コマンドラインを使用して、システムのプロパティをJava仮想マシンに実行するとき、Linuxボックスで Hudson ビルドを実行する場合)に渡します。これは、2.0ではかなりうまく機能していました。 2.1.0にアップグレードしてから、システムは完全に機能しなくなりました。システムプロパティが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); 
38
raisercostin

これは、MavenまたはSurefireプラグインの問題ではないと思います。そうでなければ、確実な行動は異なる。これは、Surefireが [〜#〜] jvm [〜#〜] をフォークしたときに、親JVMからすべてのシステムプロパティを取得しないように見えます。

そのため、argLineを使用して、テストに必要なシステムプロパティを渡す必要があります。したがって、これらは両方とも機能するはずです

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

または

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

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

コマンドライン引数と設定ファイルを混同しないように注意してください。構成ファイル(pom.xml)がすべてのcmd引数を上書きしています。そのため、raisercostinが説明したように、コマンドラインを介してそれを渡したい場合は、pom.xml内でsurefireプラグインを設定しないでください。

2
bogdandrags