2013-06-11 44 views
8

如果可以使用Gradle中的其他項目的任務,試着讓我的頭腦清晰。比方說,項目B是含com.MyTask的src/main/Groovy中的一個項目,其母公司項目AGradle依賴項在buildscript中投影

在項目C的build.gradle,也有父項目A:

buildscript { 
    dependencies{ 
     project(':ProjectB') 
    } 
} 

這似乎是合法的,因爲在「項目(:'ProjectB')中引入一個錯字」難以實現。什麼也失敗是引入這條線:

import com.MyTask 

項目引用無效在buildscript關閉?同樣嘗試移動com.MyTask來構建成功的同樣數量的src/src/main/groovy。

回答

4

這爲我工作的解決方案添加對任務的依賴性是使「com.MyTask」無論是在configurationtime和資源可用。 項目A(父)得到這個加入到buildSrc /的build.gradle的sourceSets:

sourceSets{ 
    main{ 
     groovy{ 
      srcDir 'ProjectB/src/main/groovy' 
     } 
    } 
} 

現在項目C和所有其他項目可以使用MyTask。同時,它與ProjectB的最後一個罐子捆綁在一起。

的問題進行了討論之間的亞當·默多克,盧克·戴利和史蒂夫·埃伯索爾之間徹底:http://gradle.1045684.n5.nabble.com/buildSrc-as-a-regular-project-td5677255.html

編輯:這是比獨立的項目更聰明的操縱父buildSrc。這樣IntelliJ是幸運的。

+0

「IntelliJ不喜歡它「哈哈,不,我敢打賭它沒有。 –

+0

哈哈!對不起,編輯答案就像您評論@ mike-rylander一樣! – judoole

+0

感謝您瞭解如何讓IntelliJ開心。 –

0

從搖籃文檔15.4. Adding dependencies to a task

實施例15.13。從另一個項目

build.gradle 

project('projectA') { 
    task taskX(dependsOn: ':projectB:taskY') << { 
     println 'taskX' 
    } 
} 

project('projectB') { 
    task taskY << { 
     println 'taskY' 
    } 
} 
+0

良好的通話!但我可能沒有足夠清楚地說明問題。它沒有定義我想要使用的任務,它是在類路徑上創建的任務。例如,將ProjectC導出到mavenLocal()並將其導入ProjectB的buildscript中可以正常工作。然後MyTask可用。 – judoole

+0

還嘗試在ProjectC中定義一個「MyTask」,並依賴於在ProjectB中,但我無法將「MyTask」放在src/main/gradle中,而不是在buildSrc/src/main/gradle中。 – judoole

+0

@OleChristianLangfjæran你看過15.2嗎?你有沒有嘗試過'tasks.getByPath('MyTask')' –

相關問題