我依赖于一个由分类器识别的特殊版本的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)
}
另请参阅按分类器渐变更改依赖关系。存在相同的潜在问题