コマンドラインを使用して、システムのプロパティを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);
これは、MavenまたはSurefireプラグインの問題ではないと思います。そうでなければ、確実な行動は異なる。これは、Surefireが [〜#〜] jvm [〜#〜] をフォークしたときに、親JVMからすべてのシステムプロパティを取得しないように見えます。
そのため、argLineを使用して、テストに必要なシステムプロパティを渡す必要があります。したがって、これらは両方とも機能するはずです
mvn2.1 -Dsystem.test.property=test test -DforkMode=never
または
mvn2.1 test -DargLine="-Dsystem.test.property=test"
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>
コマンドライン引数と設定ファイルを混同しないように注意してください。構成ファイル(pom.xml)がすべてのcmd引数を上書きしています。そのため、raisercostinが説明したように、コマンドラインを介してそれを渡したい場合は、pom.xml内でsurefireプラグインを設定しないでください。