私はマルチプロジェクトを持っており、最後のサブプロジェクトをビルドした後、すべてのjarを処理したいと思います。ルートディレクトリに./gradlew install
を呼び出す際にルートプロジェクトでパス 'build'のタスクが見つかりません
task install(dependsOn: 'build', type: Copy) {
doLast {
println "exec install task"
}
}
、私はこのエラーに直面しています: は、したがって、私は、ルート・プロジェクトでタスクを作成した
FAILURE: Build failed with an exception.
* What went wrong:
Could not determine the dependencies of task ':install'.
> Task with path 'build' not found in root project 'foo'.
しかし、./gradlew tasks
を呼び出すと、私はこれらのタスクを示しています。
:tasks
------------------------------------------------------------
All tasks runnable from root project
------------------------------------------------------------
Build tasks
-----------
assemble - Assembles the outputs of this project.
build - Assembles and tests this project.
...
どのようにして目的の機能を達成できますか?
がご説明いただき、誠にありがとうございます。私はできるだけ早くそれを試してみましょう。 'dependsOn subprojects * .findByName( 'build').minus(null)'は 'install'を1回だけ呼び出すでしょうか?サブプロジェクトA、B、Cがある場合、 'install'はすべてのサブプロジェクトの最後のビルドが終了した後に一度だけ実行されます。 – user3105453
はい、すべてのタスクは1回だけ実行されます。1つが複数の他のタスクに依存する場合、これらのタスクがすべて完了した後に実行されます。あなたが100%確実であれば、サブプロジェクトCの 'build'タスクは__always__が最後のものになります。' dependsOn ':projectC:build''を使うことができますが、それぞれのタスクに依存することをお勧めします。 Gradleに依存ツリーをそれ自身で把握させる。 3つのプロジェクトでは、 'dependsOn ':projectA:build'、 ':projectB:build'、 ':projectC:build''を介して、依存関係を手動で定義することもできます。 –
あなたのソリューションを試してみた。残念なことに 'findByName'は動作しませんでしたが、このコード行は私が期待している通りです:' dependsOn subprojects * .getTasksByName( "build"、true) 'お気軽にソリューションをアップデートしてください。私はそれをそのまま受け入れることができます。どうもありがとうございました。 – user3105453