2013-04-17 9 views
10

私はGradleビルドツールを初めて使用しています。ユーザーガイドは読んでいますが、評価と実行の相違を完全に理解することはできません。Gradleの用語の評価と実行の違い

コンフィグレーションフェーズでは、プロジェクトオブジェクトが設定され、DAGが作成されますが、afterEvaluateがあるので、ここで何を評価していますか?タスクの依存関係の評価または何か?

答えて

11

ドキュメントで見たように、初期化、構成、実行という3つのフェーズがあります。各ステップは、ルートプロジェクトから複数のプロジェクトビルドのサブプロジェクトに移動します。 afterEvaluateは、マルチプロジェクトビルドのルートグラデルファイルで、サブプロジェクトでの設定に基づいて特定の項目を設定する場合に便利です。

特定のプラグインが定義されているすべてのサブプロジェクトに対してタスクを追加したいとします。ルートプロジェクトに追加する場合:

subprojects {subProject -> 
    if (subProject.plugins.hasPlugin('myplugin')){ 
    subProject.task('newTask')<<{ 
     println "This is a new task" 
    } 
    } 
} 

このプロジェクトは、ルートプロジェクトがサブプロジェクトより前に設定されているため追加されません。

subprojects {subProject -> 
    afterEvaluate{ 
    if (subProject.plugins.hasPlugin('myplugin')){ 
     subProject.task('newTask')<<{ 
     println "This is a new task" 
     } 
    } 
    } 
} 
+0

をので、残りの設定が行われた後** afterEvaluate **いくつかの項目を設定することができます。afterEvaluateを追加 はあなたのためにこれを解決するのだろうか? doLastのようなものですが、単独のタスクではありません。** afterEvaluate **は、他の設定の後、実行前に設定を置きます。したがって、構成の終了後、実行前に評価が実行されますか?私は正しい? – Xelian

+8

はい、あなたは正しいです。特定のプロジェクトが設定された後に実行される 'project.afterEvaluate'の他に、すべてのプロジェクトが設定された後に実行される' gradle.projectsEvaluated'フックもあります。 –

関連する問題