2013-03-20 47 views
7

您好我有多重的gradle項目設置gradle這個「建設」的任務混亂

-root_project 
|-sub_project1 
|-sub_project2 
|-sub_project3 

所有的偉大工程,但有一兩件事讓我發瘋。在我的構建腳本:

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任務」 <叫 - 下「所有任務的任務從可運行根項目」我看到 '構建'

,但是當我嘗試添加dependsOn( '構建'),dependsOn( ':建設')或dependsOn( ':根:構建')它告訴我

什麼出錯:執行任務':任務'失敗。

無法確定任務':buildroom'的相關性。

'基地' 插件添加 '組裝' 和 '乾淨' 的任務,但不建...

任何提示?

回答

10

build任務由java-base插件聲明。很可能您的根項目不會(直接或間接)應用java-base,因此沒有build任務。這就是爲什麼dependsOn("build")會在相同的項目中添加一個名爲build的任務依賴項,最終導致錯誤。 defaultTasks是不同的:

  • 它只接受任務名稱(而dependsOn也接受任務路徑和Task對象)。
  • 其任務名稱被解析爲任務,就像任務名稱已經在命令行中輸入一樣。換句話說,所有項目都會搜索具有給定名稱的任務,並返回一組匹配任務。
+2

感謝Peter,現在明白了對於detaultTasks **所有的子項目都會搜索一個具有給定名稱的任務,並返回一組匹配的任務**這一切都是有道理的。謝謝你的回答。 – 2013-03-20 22:49:59

+0

好吧,還有一些其他任務如何調用這個'java build'? – 2016-02-01 09:40:38