回答:
通常、org.gradle.api
パッケージから関連する例外をスローします。たとえばInvalidUserDataException
、誰かが無効なものを入力した場合やGradleScriptException
、より一般的なエラーが発生した場合などです。
現在のタスクまたはアクションを停止して、次に進む場合は、 StopActionException
require(something != whatever) { "No good!" }
より冗長でtype-eeとは対照的ですif(something != whatever){ throw new GradleException("No good!") }
GradleScriptException
は、それが原因のために2番目のパラメータを必要とするということです。
make
ことですrules
(タスク-S)が成功したか失敗しました。私は一度試しましたreturn false
-Gradleはそれを無視して実行を続けました。
現在、専用の方法はありませんが、追加する方法は検討されています。
Gradleビルドを停止するための推奨される方法は、例外をスローすることです。Groovyは例外をチェックしておらず、Gradleはデフォルトで例外タイプを出力しないため、どの例外がスローされるかはそれほど重要ではありません。ビルドスクリプトでは、GradleExceptionがよく使用されますが、Groovyアサーションも妥当なように見えます(状況と対象ユーザーによって異なります)。重要なのは、明確なメッセージを提供することです。原因を追加すると(可能な場合)、デバッグに役立ちます(--stacktrace
)。
Gradleでは、専用の例外タイプを提供しますStopExecutionException
/ StopActionException
現在のタスク/タスク・アクションを停止しますが、ビルドを継続します。
後で例外をキャッチできるようにしたくない場合の別のオプションは、ant failタスクを呼び出すことです。私の意見では少し読みやすく、-stacktraceを使用せずにユーザーに素敵なメッセージを与えることができます。
task (tarball, dependsOn: warAdmin) << {
ant.fail('The sky is falling!!')
}
次のようなメッセージが表示されます。
* What went wrong:
Execution failed for task ':tarball'.
> The sky is falling!!
おそらくこれをキャッチできます(おそらくantのBuildExceptionをスローしますか?)。しかし、それが目標である場合は、ant.failを使用しません。tim_yatesが提案するように、標準のGradle例外をスローすることで、どの例外をキャッチするかを簡単に確認できるようにします。
throw new GradleException("The sky is falling!!")
以下は、Gradle javacタスクがエラーをスローする方法をエミュレートしようとするコードフラグメントです。
task myCommand(type:Exec) {
... normal task setup ....
ignoreExitValue true
standardOutput = new ByteArrayOutputStream()
ext.output = { standardOutput.toString() }
doLast {
if (execResult.exitValue) {
logger.error(output())
throw new TaskExecutionException( it,
new Exception( "Command '${commandLine.join(' ')}' failed; "
+ "see task output for details." )
)
}
}
}
コマンドが戻る0
と、出力はありません。他の値を指定すると、standardOutputが出力され、ビルドが停止します。
注:コマンドがerrorOutputにも書き込む場合は、それをエラーログに含める必要があります。