【问题标题】:How can Maven Shade Plugin relocate multiple versions of a transitive dependency?Maven Shade Plugin 如何重新定位传递依赖的多个版本?
【发布时间】:2017-05-22 19:56:23
【问题描述】:

我有两个依赖项,artifact-aartifact-b。每个都依赖于不同版本的 artifact-c。如何对工件进行着色以使用这些不同的依赖项? (或者让 artifact-a 使用阴影依赖,而 artifact-b 使用普通依赖。

        <dependency>
            <groupId>group-a</groupId>
            <artifactId>artifact-a</artifactId>
            <version>2.1.0</version>
<!-- artifact-a uses version 3 of artifact-c.
How do I relocate version 3 without conflicting with version 4?
                <groupId>group-c</groupId>
                <artifactId>artifact-c</artifactId>
                <version>3.0.0</version>
-->
      </dependency>
        <dependency>
            <groupId>group-b</groupId>
            <artifactId>artifact-b</artifactId>
            <version>1.5.0</version>
<!-- artifact-b uses version 4 of artifact-c. 
How do I relocate version 4 without conflicting with version 3?
                <groupId>group-c</groupId>
                <artifactId>artifact-c</artifactId>
                <version>4.0.0</version>
-->
      </dependency>

【问题讨论】:

  • 您可以尝试在 Maven 阴影配置中使用 &lt;artifactSet&gt; &lt;includes&gt; &lt;include&gt;group-c:artifact-c:*:4.0.0&lt;/include&gt; &lt;/includes&gt; &lt;excludes&gt; &lt;exclude&gt;group-c:artifact-c:*:3.0.0&lt;/exclude&gt; &lt;/excludes&gt; &lt;/artifactSet&gt;
  • 我认为这是不可能的。通常 Maven 会忽略其中一个依赖项(当您分析依赖项时,它会说“忽略版本 x.y.z”)。除非您使用不同的类加载器完全分离依赖项,否则使用包含相同类的两个不同依赖项将不起作用。
  • @nullpointer 谢谢你,但我不能排除这两个版本的“c”,因为“a”和“b”需要不同版本的“c”。

标签: java maven dependency-management maven-shade-plugin build-dependencies


【解决方案1】:

这可以通过创建新的 Maven 模块来完成,其唯一目的是遮蔽 artifact-a 及其依赖项(分别为 artifact-b)。然后,主模块将依赖于这两个新模块。

【讨论】:

    猜你喜欢
    • 2015-04-12
    • 2020-06-24
    • 1970-01-01
    • 2022-07-18
    • 2010-11-08
    • 2019-01-25
    • 2011-12-22
    • 2011-02-13
    • 1970-01-01
    相关资源
    最近更新 更多