使用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 }
但这需要我在将每个依赖项组合在一起时指定每个依赖项的属性。
任何人都建议使用可以解决此问题的语法?
最佳答案
首先,有一些方法可以简化(或至少缩短)声明。例如:
compile 'commons-collections:commons-collections:3.2.1@jar'
compile 'commons-lang:commons-lang:2.6@jar'
要么:
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
}
}
关于build - 如何在Gradle中的依赖项组上指定属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10554105/