依赖项解析期间的Gradle更改分类器

时间:2016-03-23 13:07:18

标签: java gradle dependency-management

我依赖于由分类器(例如三叶草)识别的特殊版本的jar。我可以轻松地将其指定为依赖项。不幸的是,它在pom中指定的所有依赖项都没有分类器。

compile(group: 'ch.mypackage', name: 'projectWithTransitiveDeps', version: "1.0.0-SNAPSHOT", classifier: 'clover')

我想更改传递依赖项以使用分类器,但是对象上有setter:

configurations {
    compile.resolutionStrategy {
        eachDependency { DependencyResolveDetails details ->
            if (details.requested.group == 'ch.mypackage') {
                details.useTarget group: details.requested.group, name: details.requested.name, version: details.requested.version, classifier: 'clover'
            }
        }
    }
}

上述代码将失败并出现异常,因为分类器是一个未知属性。

还有另一种方法可以达到这个目的吗?

2 个答案:

答案 0 :(得分:0)

显然userTarget也需要一个字符串,你可以尝试:

details.useTarget "$details.requested.group:$details.requested.name:$details.requested.version:clover"

答案 1 :(得分:0)

根据gradle/gradle#8561中的评论:

Gradle没有兴趣将分类器概念泄漏给约束,因为约束在分类器更多是工件概念的情况下有效地应用于模块。

不可能。

但是您仍然可以exclude transitive dependencies并添加自己的内容,如下所示:

ext.myPackageVersion = '1.0.0-SNAPSHOT'
ext.myPackageClassifier = 'clover'

dependencies {
  compile(group: 'ch.mypackage', name: 'projectWithTransitiveDeps', version: myPackageVersion, classifier: myPackageClassifier) {
    exclude group: "ch.mypackage", module:'transitiveDep'
  }
  compile(group: 'ch.mypackage', name: 'transitiveDep', version: myPackageVersion, classifier: myPackageClassifier)
}

另请参阅Gradle changing dependencies by classifier。存在相同的潜在问题