問題を検出した後に Gradle ビルドを停止するにはどうすればよいですか? アサートを使用したり、例外をスローしたり、System.exit を実行したり (悪い考え)、Gradle で専用関数を使用したりできます (ただし、見つけられませんでした)。Gradle の最善の方法は何ですか (そしてその理由は?)。
6 に答える
org.gradle.api
私は通常、パッケージから関連する例外をスローします。たとえばInvalidUserDataException
、誰かが無効なものを入力した場合やGradleScriptException
、より一般的なエラーの場合です。
現在のタスクまたはアクションを停止して次のタスクに進みたい場合は、StopActionException
ビルドを停止する場合は、次をスローします。
throw new GradleException('error occurred')
または、上記の例外のサブクラスをスローします。一部のサブクラスの例外は、実際には現在のタスクを失敗させるだけで、ビルドを続行します。
現在、専用のメソッドはありませんが、追加する議論が行われています。
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例外をスローすることで、キャッチする例外を簡単に確認できるようにします。
シンプルな GradleException をスローすると、ビルド スクリプトが停止します。これは、必要な環境設定を確認するのに最適です。
GradleException('your message, why the script is stopped.')
例:
if(null == System.getenv()['GRADLE_USER_HOME']) {
throw new GradleException('Required GRADLE_USER_HOME environment variable not set.')
}
以下は、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 にも書き込む場合は、それをエラー ログに含める必要がある場合があります。