使用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 }但这要求我指定每个依赖项的属性,而我更愿意将它们分组。
有人建议使用一种语法来解决这个问题吗?
发布于 2012-05-11 17:43:44
首先,有一些方法可以简化(或至少缩短)声明。例如:
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
}
}发布于 2012-05-12 02:28:07
创建单独的配置,并对所需的配置进行传递= 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配置,我可以使用默认的transitive = true。
根据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个依赖项。
值得对构建工件进行类似的检查和检查。
https://stackoverflow.com/questions/10554105
复制相似问题