2014-01-18 196 views
1

基本上我想要做的是定義一組依賴關係,然後在各個構建腳本中調用一個函數或類似的東西來添加它們。基本上是這樣的:在Gradle中定義依賴關係集

/build.gradle

apply plugin: 'base' // To add "clean" task to the root project. 

subprojects { 
    apply from: rootProject.file('common-deps.gradle') 
} 

/settings.gradle

include ":sub-project" 

/common-deps.gradle

def addHttpComponents() { 
    dependencies { 
     compile  group: 'org.apache.httpcomponents', name: 'httpcore', version: '4.3' 
     compile  group: 'org.apache.httpcomponents', name: 'httpclient', version: '4.3.1' 
    } 
} 

那麼如果我想添加HttpComponents到我的版本。我希望能夠只寫我的個子項目的生成文件:

/sub-project/build.gradle

apply maven 
apply java 

addHttpComponents() 

是否有這樣做如上文件失敗的一種方式跑步。或者我完全用錯誤的方式去解決這個問題。

回答

2

首先,爲什麼你的方法行不通:

apply from:施加gradle這個腳本項目對象。這意味着您可以在腳本中配置項目,但在該腳本中定義的本地方法不會在其他腳本中奇蹟般地出現。

您可以做的是將您的方法設置爲項目對象的擴展屬性。然後,您的方法將通過項目對象變爲可用於其他腳本。

變化/common-deps.gradle

ext.addHttpComponents = { 
    dependencies { 
    compile  group: 'org.apache.httpcomponents', name: 'httpcore', version: '4.3' 
    compile  group: 'org.apache.httpcomponents', name: 'httpclient', version: '4.3.1' 
} 
} 

,事情應該更好地工作。


接下來,無論如何,你的方法似乎有點複雜。爲什麼不乾脆:

共deps.gradle

dependencies { 
    compile  group: 'org.apache.httpcomponents', name: 'httpcore', version: '4.3' 
    compile  group: 'org.apache.httpcomponents', name: 'httpclient', version: '4.3.1' 
} 

,然後在/sub-project/build.gradle

apply from: rootProject.file('common-deps.gradle') 

最後,我想你意思是

apply plugin: 'maven' 
apply plugin: 'java' 

in /sub-project/build.gradle