依赖关系解析过程中渐变分类器



我依赖于一个由分类器识别的特殊版本的jar(例如clover)。我可以很容易地将其指定为依赖项。不幸的是,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'
            }
        }
    }
}

由于分类器是未知属性,上述代码将失败并出现异常。

有其他方法可以做到这一点吗?

显然userTarget也需要一个字符串,你能试试吗:

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

根据gradle/gradle#8561:中的注释

Gradle没有兴趣将分类器概念泄露给约束,因为约束有效地应用于模块,而分类器更像是一个工件概念。

这是不可能的。

但是,您仍然可以排除可传递依赖项,并添加自己的依赖项,类似于以下内容:

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)
}

另请参阅按分类器渐变更改依赖关系。存在相同的潜在问题

最新更新