首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Gradle中指定依赖组的属性?

如何在Gradle中指定依赖组的属性?
EN

Stack Overflow用户
提问于 2012-05-11 15:13:28
回答 2查看 5.1K关注 0票数 2

使用Gradle,我希望能够在一组依赖项上禁用传递性,同时允许其他依赖项。就像这样:

代码语言:javascript
复制
// 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不会接受这种语法。如果我这么做的话,我就能让它发挥作用:

代码语言:javascript
复制
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 }

但这要求我指定每个依赖项的属性,而我更愿意将它们分组。

有人建议使用一种语法来解决这个问题吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-05-11 17:43:44

首先,有一些方法可以简化(或至少缩短)声明。例如:

代码语言:javascript
复制
compile 'commons-collections:commons-collections:3.2.1@jar'
compile 'commons-lang:commons-lang:2.6@jar'

或者:

代码语言:javascript
复制
def nonTransitive = { transitive = false }

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

为了同时创建、配置和添加多个依赖项,您必须引入一点抽象。类似于:

代码语言:javascript
复制
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
    }
}
票数 5
EN

Stack Overflow用户

发布于 2012-05-12 02:28:07

创建单独的配置,并对所需的配置进行传递= false。在依赖项中,只需将配置包含到编译或它们所属的任何其他配置中即可。

代码语言:javascript
复制
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的评论编辑如下:

这个能修好吗?

代码语言:javascript
复制
//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个依赖项。

值得对构建工件进行类似的检查和检查。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10554105

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档