build - 如何在Gradle中的依赖项组上指定属性?

标签 build gradle dependency-management

使用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/

相关文章:

maven - 如何从Grails命令/SDK清除Maven缓存?

iphone - 应用程序无法安装在 iPhone 上,但可以在模拟器上运行

build - Gradle 多项目,更改默认构建文件名(build.gradle)

android - 资源 'attr/pivotX' 与配置 ' ' 的重复值

maven - Gradle Maven 部署程序版本控制

java - Gradle 将依赖项下载到缓存中而不是 Maven 存储库中

python - 如何避免将开发包放入 requirements.txt

android - 如何在 jenkins 中为 android 项目创建 local.properties?

opencv - 使用 opencv_contib 安装 OpenCV 3.2 时为 "OPENCV_TEST_DATA_PATH environment variable was not specified"

java - app:transformDexArchiveWithExternalLibsDexMergerForDebug