44

AbstractMavenMojoのexecuteメソッドは、MojoExecutionExceptionとMojoFailureExceptionの2つの例外をスローすることを宣言します。いずれかをスローするとビルドが停止し、いずれの場合もログにほぼ同じメッセージが表示されます。

MojoExecutionExceptionのメッセージは次のとおりです。

[INFO] ------------------------------------------------------------------------
[ERROR] BUILD ERROR
[INFO] ------------------------------------------------------------------------
[INFO] [exception text]
[INFO] ------------------------------------------------------------------------
[INFO] For more information, run Maven with the -e switch
[INFO] ------------------------------------------------------------------------

MojoFailureExceptionのメッセージは次のとおりです。

[INFO] ------------------------------------------------------------------------
[ERROR] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] [exception text]
[INFO] ------------------------------------------------------------------------
[INFO] For more information, run Maven with the -e switch
[INFO] ------------------------------------------------------------------------

どの例外をいつスローする必要があり、その理由は何ですか?

4

2 に答える 2

34

MojoExecutionException問題が原因でビルドを続行できない場合はa をスローし、MojoFailureExceptionそうでない場合は を使用する必要があるようです。

MojoFailureExpectionsmaven 実行時のハンドリングの動作を制御できます。

次のリンクで違いを詳しく説明しています: https://books.sonatype.com/mvnref-book/reference/writing-plugins-sect-custom-plugin.html#writing-plugins-sect-failure
リンク切れ?Google 検索 sonatype writing-plugins-sect-custom-plugin writing-plugins-sect-failure

于 2009-07-01T13:12:12.623 に答える
4

MavenFailureExceptionビルドステップが失敗したが無視できる場合 (たとえば、失敗したテストを無視したい場合) をスローします。

続行する方法がない場合にスローしMavenExecutionExceptionます。たとえば、コンパイルしようとしたときにプロジェクトをコンパイルできなかったなどの回復不能な状態を検出したとします。したがって、その後のすべてはとにかく無駄になります。

MavenExecutionExceptionの動作は構成可能ですが、常にビルドを強制終了しMavenFailureExceptionます。

デフォルトの動作は、すばやく失敗することです。つまり、ビルド エラーと同じ動作です。ほとんどの場合、これが必要です。コマンド ライン フラグを渡すことで動作を変更できます。

mvn -fae最後に失敗します。つまり、すべてのビルドステップが実行され、ステージが失敗した場合に後続の失敗が発生する可能性があります。ビルド全体は、すべてのステップが実行された後にのみ失敗します。

mvn -fn失敗しないでください。これは、たとえば失敗した統合テストを無視したいが、それでもmvn deploy.

于 2018-04-04T16:51:39.347 に答える