如何强制分类器依赖传递依赖?

How to force classifier on transitive dependencies?

我有依赖项:

现在,我想在 A 上使用说明符,假设:A-foo。但是,B 仍然依赖于 A,因此,我将 A-fooA 都包含在目标工件中。

有没有办法在某些依赖项上强制分类器?

为什么?

我需要这个的原因如下。

我的 A 是一个基于 Java8 构建的 Java 库,但打包为 Multi-Release Jar 这意味着它包含额外的 类 用于当 jar 是 运行 在 Java9.

不幸的是,一些旧的工具和服务器无法识别 MR Jars,因此它们无法正常工作。

出于这个原因,我的库有 A-foo 版本,没有任何额外的 类,所以旧服务器可以 运行 它。

但是,如果用户正在使用依赖于我的 A 的库 B,他将简单地获取 A 的 MRJar 版本并且它会再次失败。我希望能够以某种方式阻止这种情况。

带有分类器的工件是不同的工件,而不仅仅是同一工件的不同版本。它不能取代 - 无论是技术上还是逻辑上 - 原始工件,意思是:即使你能在技术上找到绕过它的方法,它也违背了 Maven 逻辑。

如果你更详细地描述你想解决的问题,人们可能会找到 "Maven way" 来解决。

在 Gradle 中,可以使用以下代码实现:

compile ('org.jodd:jodd-core:4.1.4:jre9') {
    force = true
}
compile ('org.jodd:jodd-joy:4.1.4') {
    exclude group: 'org.jodd', module:'jodd-core'
}

这意味着:

  • force classifier 库的使用;
  • 排除了传递性非分类器 库的依赖项