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
私はその振る舞いを本当に理解していません。誰かが私を啓発できますか?
はい、あなたは持っている必要があります
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
プロパティを設定していません。システムプロパティを追加しています。
テストに構成を渡す場合は、たとえば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 はもっと感じるでしょう快適。