2012-05-11 100 views
2

使用Gradle,我希望能夠禁用一組依賴關係上的傳遞性,同時仍然允許其他人使用。像這樣:如何在Gradle中指定依賴關係組的屬性?

// transitivity enabled 
compile(
    [group: 'log4j', name: 'log4j', version: '1.2.16'], 
    [group: 'commons-beanutils', name: 'commons-beanutils', version: '1.7.0'] 
) 

// transitivity disabled 
compile(
    [group: 'commons-collections', name: 'commons-collections', version: '3.2.1'], 
    [group: 'commons-lang', name: 'commons-lang', version: '2.6'], 
) { 
    transitive = false 
} 

Gradle不接受這個語法。我可以得到它的工作,如果我這樣做:

compile(group: 'commons-collections', name: 'commons-collections', version: '3.2.1') { transitive = false } 
compile(group: 'commons-lang', name: 'commons-lang', version: '2.6']) { transitive = false } 

但是,這要求我對每項依賴指定屬性,當我寧願它們組合在一起。

任何人都有一個語法的建議,將在此工作?

回答

5

首先,有一些方法可以簡化(或至少縮短)你的聲明。例如:

compile 'commons-collections:commons-collections:[email protected]' 
compile 'commons-lang:commons-lang:[email protected]' 

或者:

def nonTransitive = { transitive = false } 

compile 'commons-collections:commons-collections:3.2.1', nonTransitive 
compile 'commons-lang:commons-lang:2.6', nonTransitive 

爲了創建,配置和一次添加多個依賴,你就必須引進一點點抽象。例如:

def deps(String... notations, Closure config) { 
    def deps = notations.collect { project.dependencies.create(it) } 
    project.configure(deps, config) 
} 

dependencies { 
    compile deps('commons-collections:commons-collections:3.2.1', 
      'commons-lang:commons-lang:2.6') { 
     transitive = false 
    } 
} 
3

創建單獨的配置,並在所需配置上具有傳遞= false。 在依賴關係,簡單地包括配置成編譯或他們屬於

configurations { 
    apache 
    log { 
     transitive = false 
     visible = false //mark them private configuration if you need to 
    } 
} 

dependencies { 
    apache 'commons-collections:commons-collections:3.2.1' 
    log 'log4j:log4j:1.2.16' 

    compile configurations.apache 
    compile configurations.log 
} 

上面讓我禁用日誌相關資源的傳遞依賴,而我有默認的傳遞=真應用的Apache配置任何其他配置。

下面編輯爲每TAIR的評論:

將這種修復?

//just to show all configurations and setting transtivity to false 
configurations.all.each { config-> 
    config.transitive = true 
    println config.name + ' ' + config.transitive 
} 

和運行的gradle 依賴

查看的依賴關係。我使用Gradle-1.0,並且在使用傳遞性的false和true時,就顯示依賴關係而言,它表現良好。

我有一個活躍的項目,當使用上述方法將傳遞性轉換爲true時,我有75個依賴項,並且在傳遞到false時有64個依賴項。

值得做類似的檢查並檢查構建工件。

+0

這在gradle-1.0中不起作用 – Tair