web-dev-qa-db-ja.com

maven ::マルチモジュールプロジェクトで単一のテストのみを実行

いくつかのモジュールで1つを除くすべてのテストをスキップするために、コマンドライン引数を提供する方法はありますか?別のテストを実行する必要があるたびにpom.xmlを変更する必要はありませんか?

たとえば、TeamCityでビルド構成を作成し、一部のモジュールで単一のテストのみを実行するためのコマンドライン引数を提供します。次回は変更して別のテストを実行する必要があります。

おそらく、CIの使用方法ではなく、それでもあります。

52
jdevelop

surefireで1つのテストを実行する ?に関するドキュメントを読んだと思います。彼らがあなたに言っていないのは、サブモジュールでそれを行う方法です:

mvn test -Dtest=testname -pl subproject

ここで、subprojectはそのテストを含むプロジェクトです。 mvn manページから:

-pl、-projects argすべてのプロジェクトの代わりにビルドする指定されたリアクタプロジェクトのカンマ区切りリスト。プロジェクトは、[groupId]:artifactIdまたはその相対パスで指定できます。

74
Nick Gerner

私が見る他の答えは、ビルドされる他のサブモジュールに依存するプロジェクトについては完全には完成していません。 1つのオプションは、mvn installを実行して必要なjarを~/.m2/...にインストールすることですが、そのオプションはあまり「クリーン」ではありません。

次のコマンドはサブモジュールを構築し、指定されたテストクラスのみを実行します。これは、親モジュールレベルで実行されます。また、サブモジュール名を指定する必要はありません。

mvn test -DfailIfNoTests=false -Dtest={test_class_name} -am

余談ですが、これはmvn clean test -Dfa.....でも構いません。テストの実行中は常にcleanを実行する習慣があります。

参考文献..
-amは、他のすべてのサブモジュールを作成します。
-DfailIfNoTests=falseは、他のモジュールでテストを実行するつもりはないため、プロセス全体が失敗することはありません。
-plオプションは、-amがすでにすべてを構築しているため必要ありません

21
Debosmit Ray

テストするモジュールが他のプロジェクトに依存している場合、ソリューションは次のようにコマンドを変更することで機能します。

mvn test -DfailIfNoTests=false -Dtest=testname -pl subproject

リファレンス: http://www.automatethebox.com/2015/12/some-helpful-commands-to-build-multi.html

14
Lalit Kumar