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

时间:2018-02-02 20:27:50

标签: maven gradle dependencies maven-3

我有依赖关系:

  • A
  • B(这也取决于A)。

现在,我想在A上使用说明符,让我们说:A-foo。但是,B仍取决于A,因此,我会在目标工件中包含A-fooA

有没有办法强制分类器对某些依赖?

为什么?

我需要这个的原因如下。

我的A是一个基于Java8构建的Java库,但打包为Multi-Release Jar,这意味着它包含了在Java9上运行jar时的其他类。

不幸的是,一些旧的工具和服务器不知道MR Jars,这使它们无法正常工作。

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

但是,如果用户使用的库B取决于我的A,他只会获得A的MRJar版本,并且会再次失败。我希望能够以某种方式阻止这种情况。

2 个答案:

答案 0 :(得分:1)

具有分类器的工件是不同的工件,而不仅仅是同一工件的不同版本。它无法在技术上或逻辑上取代原始工件,这意味着:即使你在技术上找到解决方法,它也会违背Maven逻辑。

如果您更详细地描述要解决的问题,可以找到一个" Maven方式"这样做。

答案 1 :(得分:0)

在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'
}

这意味着:

  • 强制分类器使用库;
  • 排除了库的传递非分类器依赖项