我依赖于由分类器(例如三叶草)识别的特殊版本的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'
}
}
}
}
上述代码将失败并出现异常,因为分类器是一个未知属性。
还有另一种方法可以达到这个目的吗?
答案 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。存在相同的潜在问题