Mavenスキップテスト


226

私はMaven 2.2.1を使用していて、プロジェクトをビルドするためにこのコマンドを使用しました

mvn clean install -Dmaven.test.skip=true

ただし、アーティファクトの1つが見つからなかったため、ビルドは失敗しました。ただし、私が使用した場合:

mvn clean install -DskipTests

すべてがうまくいきました。

これまでのところ、これら2つのコマンドは同等であると考えていました。ただし、このリンク-Dmaven.test.skip=true、テストケースのコンパイルもスキップすることを示唆しているようです。

ただし、それでも、1つのコマンドが機能し、別のコマンドが機能しない理由はまだわかりません。これを誰かに説明して頂ければありがたいです。


1
どのバージョンのmaven-surefire-pluginを使用していますか?読んでいるドキュメントのバージョンと同じですか?
gerrytan 2014

2
1つはビルドをスキップし、もう1つは実行をスキップします。両方が必要な場合は、両方を使用してください。
Elliott Frisch 2014

1
失敗の詳細(エラーメッセージまたはスタックトレース)を提供できますか?
Raghuram

1
EoLすでに定義されている、このような古いMavenバージョンを使用しているのはなぜですか。
khmarbaise 2014

1
だから、私が使用しなければならないテスト関連のすべてを完全にスキップすることは本当に本当-Dmaven.test.skip=true -DskipTestsですか?どちらか一方が、時々の状況に応じて、省略することができますが、誰がその...考えることを望んでいる
ランドンクーン

回答:


121

ご指摘のとおり-Dmaven.test.skip=true、テストのコンパイルはスキップされます。要点は、テストアーティファクトの構築をスキップすることです。大規模プロジェクトの一般的な方法は、テストユーティリティと基本クラスを同じプロジェクトのモジュール間で共有することです。

これはtest-jar、以前にビルドされたモジュールのいずれかをモジュールに要求させることによって実現されます。

<dependency>
  <groupId>org.myproject.mygroup</groupId>
  <artifactId>common</artifactId>
  <version>1.0</version>
  <type>test-jar</type>
  <scope>test</scope>
</dependency>

もし-Dmaven.test.skip=true(または単に-Dmaven.test.skip)が指定されている、test-jarsが構築されていない、そしてそれらに依存しているすべてのモジュールは、ビルドに失敗します。

対照的に、を使用すると-DskipTests、Mavenはテストを実行しません、テストをコンパイルしてtest-jarを構築し、後続のモジュールで使用できるようにします。


2
この問題を解決するには?オンラインのmavenコマンドとして-Dmaven.test.skipを使用します。
ネプチューン2016年

2
@neptuneどんな問題?新しい質問がある場合は、新しい投稿を使用して質問してください。
Mureinik 2016年

58

パッケージをビルドするために、テストと相互依存関係がありました。

次のコマンドは、目標を達成するために、テストアーティファクトの必要性を無効にします。

mvn -DskipTests=true  package

29

各パラメーターには違いがあります。

  • -DskipTestsは、実行中のテストフェーズをスキップします。つまり、このプロセスの最後に、テストをコンパイルします。

  • -Dmaven.test.skip = trueは、テストフェーズのコンパイルと実行をスキップします。

パラメータ-Dmaven.test.skip = trueでコンパイルをスキップするため、テストアーティファクトはありません。

詳細については、surfireのドキュメントをご覧ください。http://maven.apache.org/plugins-archives/maven-surefire-plugin-2.12.4/examples/skipping-test.html


15

同じ問題が発生する例を挙げますが、質問に対する回答が得られない場合があります。(さらに、この例では、Maven 3の知識を使用していますが、Maven 2には適用されない場合があります。)

マルチモジュールmavenプロジェクト(モジュールAとを含みBB依存する場所A)では、テスト依存関係Afromに追加することもできますB

この依存関係は次のようになります。

<dependency>
     <groupId>com.foo</groupId>
     <artifactId>A</artifactId>
     <type>test-jar</type> <!-- I'm not sure if there is such a thing in Maven 2, but there is definitely a way to achieve such dependency in Maven 2. -->
     <scope>test</scope>
</dependency>

(詳細については、https://maven.apache.org/guides/mini/guide-attached-tests.htmlを参照してください
プロジェクトでは、テストクラスとテストリソースが配置Aされている分類子を使用して二次アーティファクトが生成されることに注意してくださいtests

を使用してプロジェクトをビルドする場合-Dmaven.test.skip=trueテストアーティファクトがローカルリポジトリまたは外部リポジトリで見つからない限り、依存関係解決エラーが発生します。その理由は、テストクラスがコンパイルされておらず、testsアーティファクトも作成されていないためです。
あなたとあなたのビルドを実行する場合は、-DskipTestsあなたのtestsアーティファクト(テストが実行されませんが)生成され、依存関係が解決されます。


10

Mavenクリーンインストール中にテストケースをスキップするには、次のコマンドで-DskipTestsパラメータを使用しました

mvn clean install -DskipTests

端末ウィンドウに


9

パラメータ-DskipTestsは、surefireプラグインのバージョンによっては機能しない場合があります。

「-DskipTests」の代わりに「-Dmaven.test.skip.exec」を使用できます

出典:Surefireパラメータの詳細


1

mavenのコンパイル中に、pom.xmlに次のプラグインを追加することで、テストの実行をスキップできます

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.20.1</version>
    <configuration>
         <skipTests>true</skipTests>
    </configuration>
</plugin>

1
実行してもテストをスキップしますmvn test
Pratik Singhal
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.