1前書き

このクイックガイドでは、テスト結果を無視しながらMavenを使ってjarファイルを作成する方法を説明します。

デフォルトでは、Mavenはプロジェクトの構築中に単体テストを自動的に実行します。ただし、テストがスキップされ、テスト結果に関係なくプロジェクトをビルドする必要がある場合がまれにあります。


2プロジェクトの構築

簡単なプロジェクトを作成して、小さなテストケースも含めます。

public class TestFail {
    @Test
    public void whenMessageAssigned__thenItIsNotNull() {
        String message = "hello there";
        assertNotNull(message);
    }
}

次のMavenコマンドを実行してjarファイルを作成しましょう。

mvn package

  • これにより、ソースがコンパイルされ、/targetディレクトリに

    maven-0.0.1-SNAPSHOT.jar

    ファイルが生成されます。

それでは、テストを少し変更しましょう。テストは失敗し始めます。

@Test
public void whenMessageAssigned__thenItIsNotNull() {
    String message = null;
    assertNotNull(message);
}

今回、再度

mvn package

コマンドを実行しようとすると、ビルドが失敗し、maven-0.0.1-SNAPSHOT.jarファイルが作成されません。

つまり、** アプリケーションでテストに失敗した場合、テストを修正しない限り実行可能ファイルを提供することはできません。

では、どうすればこの問題を解決できるでしょうか。


3 Mavenの引数

Mavenには、この問題に対処するための独自の議論があります。



  • – Dmaven.test.failure.ignore = true


    ** は発生した失敗を無視します

テスト実行中



_



– Dmaven.test.skip = true

_


はテストをコンパイルしません

**



  • – fn



    -fae

    はテスト結果にかかわらずビルドに失敗することはありません


mvnパッケージの-Dmaven.test.skip = true

コマンドを実行して結果を確認しましょう。

----[INFO]Tests are skipped.[INFO]BUILD SUCCESS
----

これは、テストをコンパイルせずにプロジェクトが構築されることを意味します。

それでは、

__ mvnパッケージ-Dmaven.test.failure.ignore = true

__commandを実行しましょう。

----[INFO]Running testfail.TestFail[ERROR]whenMessageAssigned__thenItIsNotNull java.lang.AssertionError[INFO]BUILD SUCCESS
----

私たちのユニットテストはアサーションに失敗しますが、ビルドは成功します。

最後に、

-fn



-fae

オプションをテストしましょう。

package -fn



package -fae

の両方のコマンドは、

whenMessageAssigned

thenItIsNotNull()

テストが失敗しても

jar

ファイルを作成し、

BUILD SUCCESS__出力を生成します。

  • マルチモジュールプロジェクトの場合は

    -fn

    オプションを使用する必要があります。

    -fae

    は失敗したテストを持つモジュールを続けますが、すべての従属モジュールをスキップします。 **


4 Maven Surefireプラグイン

私たちの目標を達成するためのもう一つの便利な方法はMavenのSurefireプラグインを使うことです。

Surefireプラグインの詳細な概要については、https://www.baeldung.com/maven-surefire-plugin[この記事]を参照してください。

  • 失敗したテストを無視するには、

    testFailureIgnore

    プロパティを

    true

    ** に設定するだけです。

<plugin>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>${maven.surefire.version}</version>
    <configuration>
        <includes>
            <include>TestFail.java</include>
        </includes>
        <testFailureIgnore>true</testFailureIgnore>
    </configuration>
</plugin>

それでは、

package

コマンドの出力を見てみましょう。

----[INFO] T E S T S[INFO]Running testfail.TestFail[ERROR]Tests run: 1, Failures: 1, Errors: 0, Skipped: 0, <<< FAILURE! - in testfail.TestFail
----

実行中のテストの出力から、

TestFail

クラスが失敗していることがわかります。しかしさらに調べると、BUILD SUCCESSメッセージもそこにあり、maven-0.0.1-SNAPSHOT.jarファイルがコンパイルされていることがわかります。

必要に応じて、テストの実行をスキップすることもできます。そのためには、

testFailureIgnore

行を次のように置き換えます。

<skipTests>true</skipTests>

またはコマンドライン引数

-DskipTests

を設定します。これはテストクラスをコンパイルしますが、テストの実行を完全にスキップします。


5結論

  • この記事では、テスト結果に関係なく、Mavenを使ってプロジェクトを構築する方法を学びました** 。失敗したテストをスキップしたり、テストのコンパイルを完全に除外したりする実際的な例を説明しました。

いつものように、この記事の完全なコードはhttps://github.com/eugenp/tutorials/tree/master/maven[GitHubプロジェクトについて]で利用可能です。