8

こんにちは、マルチプロジェクトのグラドルセットアップがあります

-root_project
|-sub_project1
|-sub_project2
|-sub_project3

すべてがうまく機能しますが、1つのことが私を夢中にさせます。私のビルドスクリプトでは:

defaultTasks 'build' <- this works just fine

task buildroom (description: 'This task is invoked by build room script, invokes default task plus publishes artifacts') { 
//    dependsOn('build') <-- this doesn't work

// alternative 
dependsOn(":sub_project1:build")
dependsOn(":sub_project2:build")

コマンドラインから「gradlew」を呼び出すと、<-デフォルトのタスクが実行されます

コマンドラインから「gradlew tasks」を呼び出すと、<-「ルートプロジェクトから実行可能なすべてのタスク」の下のタスクに「ビルド」が表示されます

しかし、dependsOn('build')、dependsOn(':build')、またはdependsOn(':root:build')を追加しようとすると、それが教えてくれます

問題: タスク ':tasks' の実行に失敗しました。

タスク ':buildroom' の依存関係を特定できませんでした。

「ベース」プラグインは「アセンブル」および「クリーン」タスクを追加しますが、ビルドはしません...

任意のヒント?

4

1 に答える 1

12

buildタスクはプラグインによって宣言されますjava-base。ルート プロジェクトが (直接的または間接的に) 適用されjava-baseないため、buildタスクがない可能性があります。これが、同じプロジェクトdependsOn("build")で名前が付けられたタスクにタスクの依存関係を追加する が最終的にエラーを引き起こす理由です。次の点で異なります。builddefaultTasks

  • タスク名のみを受け入れます (dependsOnタスク パスとTaskオブジェクトも受け入れます)。
  • そのタスク名は、タスク名がコマンド ラインで入力されたかのようにタスクに解決されます。つまり、指定された名前のタスクについてすべてのプロジェクトが検索され、一致するタスクのセットが返されます。
于 2013-03-20T22:18:55.987 に答える