当前位置: 首页 > 知识库问答 >
问题:

Maven Shade插件如何重新定位传递依赖项的多个版本?

郑俊弼
2023-03-14

我有两个依赖项,工件-a和工件-b。每个依赖于不同版本的工件-c。我如何对工件进行阴影以使用这些不同的依赖项?(或者让工件-a使用阴影依赖项,工件-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>

共有1个答案

娄学文
2023-03-14

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

 类似资料:
  • 我用我的真实情况来说明问题。 我使用logback 1.0.1进行日志记录,它包含SLF4J 1.6.4作为依赖项。我还为遗留日志API(Java . util . logging、log4j和commons-logging)使用SLF4J API桥,它们不是显式的依赖关系。这些也必须(最好)是版本1.6.4。 为了使我的pom.xml尽可能整洁和无错误,我想强制这些API桥接器与SLF4J版本相

  • 我有一个Maven项目,它包含两个依赖项,a和B,每个依赖项都传递依赖于C,但它们依赖于C的不同版本。假设a依赖于C版本1,而B依赖于C版本2。 不幸的是,A与版本2不兼容字节码,B与版本1也不兼容字节码。(碰巧,A与版本2是源代码兼容的,但我不认为这对我们在这里有帮助。) 这意味着我的项目中需要传递依赖项的两个版本,并且我需要A来使用版本1,需要B来使用版本2。 有办法做到这一点吗? 我假设我需

  • 我有一个巨大的java多模块应用程序,它使用gradle来管理构建和依赖关系。在其中一个模块中,假设模块1项目使用gretty插件 模块1/构建。格拉德尔 gretty对 我想将logback版本升级到最新版本。为此,我尝试了以下解决方案 但这些都不会对logback版本产生任何影响。现在需要一些建议吗

  • 关于maven和传递依赖排除有几个问题。然而,我不能让它工作。我的pom中有一些依赖项,它们重新打包了一些库,以减小pom的大小。到目前为止,这是成功的。但是当我运行时,这些可传递的依赖项会被写入。类路径文件。尽管它们被排除在外,如以下摘录所示。 Apache Maven 3.3.3(7994120775791599e205a5524ec3e0dfe41d4a06;2015-04-22T13:57

  • “DepProject”是一个Maven项目,在该项目的pom文件中,它依赖于另一个工件: 现在,当我对我的项目执行“gradle dependencies”时,它正确地表明我应该通过传递依赖项解析获得solrj依赖项,但它不尊重4.4.0版本声明,相反,我的项目获得了5.5.4版本的依赖项。 这些行在依赖关系报告中出现几次,始终相同。 然后在结果的“gradle dependencies”调用中

  • 我有一个Maven BOM文件,我将其导入到我的项目pom中: 适用于依赖项,甚至插件。但现在我还想控制pom项目中使用的插件的依赖性版本: 我想在BOM文件中指定Commons-dbcp的版本,而不必将其指定为BOM文件中jetty插件的依赖项。