【问题标题】:Gradle change classifier during dependency resolution依赖解析期间的 Gradle 更改分类器
【发布时间】:2016-07-10 19:06:23
【问题描述】:

我依赖于由分类器(例如三叶草)识别的特殊版本的 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'
            }
        }
    }
}

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

还有其他方法可以实现吗?

【问题讨论】:

  • Documentation for userTarget此方法可用于在解析之前更改依赖关系,例如更改组、名称或版本(或所有三个)。 这似乎暗示不支持覆盖分类器。
  • 此外,document 表示 DependencyResolveDetails 已弃用,您应该改用 DependencySubstitution。不确定这会影响哪个 gradle 版本。

标签: java gradle dependency-management


【解决方案1】:

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

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

【讨论】:

  • 感谢您的建议。不幸的是,它不起作用。没有例外,但它根本不尊重分类器。
【解决方案2】:

根据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。存在相同的潜在问题

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-24
    • 2023-03-29
    • 1970-01-01
    • 2015-12-06
    • 2015-12-19
    • 1970-01-01
    相关资源
    最近更新 更多