183

問題を検出した後に Gradle ビルドを停止するにはどうすればよいですか? アサートを使用したり、例外をスローしたり、System.exit を実行したり (悪い考え)、Gradle で専用関数を使用したりできます (ただし、見つけられませんでした)。Gradle の最善の方法は何ですか (そしてその理由は?)。

4

6 に答える 6

138

org.gradle.api私は通常、パッケージから関連する例外をスローします。たとえばInvalidUserDataException、誰かが無効なものを入力した場合やGradleScriptException、より一般的なエラーの場合です。

現在のタスクまたはアクションを停止して次のタスクに進みたい場合は、StopActionException

于 2012-04-25T09:09:36.457 に答える
110

ビルドを停止する場合は、次をスローします。

throw new GradleException('error occurred')

または、上記の例外のサブクラスをスローします。一部のサブクラスの例外は、実際には現在のタスクを失敗させるだけで、ビルドを続行します。

于 2012-05-12T02:35:51.153 に答える
29

現在、専用のメソッドはありませんが、追加する議論が行われています。

Gradle ビルドを停止する推奨される方法は、例外をスローすることです。Groovy にはチェック例外がなく、デフォルトでは Gradle は例外タイプを出力しないため、どの例外がスローされるかはそれほど重要ではありません。ビルド スクリプトでは、GradleException がよく使用されますが、Groovy のアサーションも (状況と対象者によって異なります) 妥当なようです。重要なのは、明確なメッセージを提供することです。原因を追加すると (利用可能な場合)、デバッグに役立ちます ( --stacktrace)。

Gradle は、現在のタスク/タスク アクションを停止するがビルドを続行するための専用の例外タイプStopExecutionException/を提供します。StopActionException

于 2012-04-25T09:32:20.167 に答える
20

後で例外をキャッチできるようにしたくない場合の別のオプションは、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例外をスローすることで、キャッチする例外を簡単に確認できるようにします。

于 2013-06-13T16:13:10.067 に答える
18

シンプルな 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.')
}
于 2014-10-03T19:51:20.397 に答える
7

以下は、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 にも書き込む場合は、それをエラー ログに含める必要がある場合があります。

于 2016-07-01T00:51:34.157 に答える