web-dev-qa-db-ja.com

Mavenコマンドラインを介したプロパティの設定

Mavenを使用しているときに、コマンドラインからいくつかの単体テストのプロパティを設定する正しい方法について混乱しています。いくつかの質問があります(例 MAVEN_OPTS環境変数を設定せずにMavenメモリパラメータを指定するコマンドラインを介してjvm引数をmavenに渡す方法はありますか?JUnitユニットテストのJVMパラメーターを設定する方法は? )このテーマに触れていますが、私が探している答えはありません。

プロパティJava.util.logging.config.classをある値に設定したいのですが、MAVEN_OPTS環境変数を設定したくありません。

次のプロパティを使用して、pomファイルでsurefireプラグインを構成できます。

<argLine>-Djava.util.logging.config.class=someClass</argLine>

テストフェーズが実行されるたびに設定されるようにします。

ただし、pomファイルから設定を削除し、コマンドラインに次を追加すると、次のようになります。

mvn package -DargLine="Java.util.logging.config.class=someClass"

次に、テストフェーズで次のエラーが報告され、ビルドが失敗します。

エラー:メインクラスJava.util.logging.config.class = someClassが見つからないかロードできませんでした

コマンドラインから次を実行した場合:

mvn package -Djava.util.logging.config.class=someClass

次に、ビルドの開始時に次のエラーが報告されますが、ビルドとテストは成功します。

構成クラス「someClass」のログ記録に失敗しましたJava.lang.ClassNotFoundException:someClass

私はその振る舞いを本当に理解していません。誰かが私を啓発できますか?

8
ksl

はい、あなたは持っている必要があります

mvn package -DargLine="-Djava.util.logging.config.class=someClass"

argLine内に-Dが追加されていることに注意してください。

その理由を説明しましょう。 argLine は確かに maven-surefire-plugin の属性であり、対応するユーザープロパティはargLineです。これは、このプロパティをコマンドラインで-DargLineを使用して直接設定できることを意味します。ただし、そのプロパティの値は-Djava.util.logging.config.class=someClassです。これは、POMでプラグインを直接構成したときに持っていたものとまったく同じです。

<argLine>-Djava.util.logging.config.class=someClass</argLine>

さらに、あなたが電話するとき

mvn package -Djava.util.logging.config.class=someClass

その場合、argLineプロパティを設定していません。システムプロパティを追加しています。

10
Tunaki

テストを構成するためのアプローチについて

テストに構成を渡す場合は、たとえばsrc/test/resources /myTestConfig.xml内のファイルを使用します。または、 Test-ng の拡張機能を使用します。一元化されたビルドサーバー、または構成値を(簡単に)変更できないコードを実行/テストしたい人にとって、テストは価値がありません。

Mavenのコマンドライン引数の推奨される使用法は、Mavenプラグイン、ビルド環境、およびビルド用のJava config)を構成することです。機能、構成、およびプラグインをできるだけ少なくしてください。将来的には多くの問題に直面し、Tweak-all-you-want-A-standardized-build-doesn't-mean-sh * t-for-me - Gradle はもっと感じるでしょう快適。

1
Stig