当前位置: 首页 > 面试题库 >

Maven-检测相同依赖项的多个版本

陆雨华
2023-03-14
问题内容

我刚刚遇到了一个案例,即我的Maven项目有两个直接依赖项,其中有两个不同版本的特定传递性依赖项。

在我的特殊情况下,我直接依赖以下内容:

    <dependency>
        <groupId>org.jclouds.driver</groupId>
        <artifactId>jclouds-sshj</artifactId>
        <version>${jclouds.version}</version>
    </dependency>

    <dependency>
        <groupId>org.mule.modules</groupId>
        <artifactId>mule-module-jersey</artifactId>
        <version>${mule.version}</version>
    </dependency>

这两个依赖项都对com.sun.jersey:jersey-
core具有(较深)的传递性依赖关系,但是每个都有不同的版本。Maven并没有失败,甚至没有警告(或者,如果没有,我从来没有看到过!)正在发生这样的事情……因此,直到调试了球衣版本时发生的问题,我才注意到它。由jclouds依赖引入的核心导致某些事情中断。

是否存在一个maven插件或其他工具可以检测到这种深度传递依赖重写,并在检测到此类冲突时至少警告用户(或使maven执行失败)…即使默认的maven行为是只是选择解决依赖性时出现的第一个版本?


问题答案:

使用Dependency Enforcer插件。当依赖关系无法正确收敛时,它将停止构建。

  <plugin>
    <groupId>org.html" target="_blank">apache.maven.plugins</groupId>
    <artifactId>maven-enforcer-plugin</artifactId>
    <version>1.0.1</version>
    <executions>
      <execution>
        <id>enforce</id>
        <configuration>
          <rules>
            <DependencyConvergence />
          </rules>
        </configuration>
        <goals>
          <goal>enforce</goal>
        </goals>
      </execution>
    </executions>
  </plugin>


 类似资料:
  • Maven插件(maven-compiler-plugin: 3.8.1和maven-surefire-plugin: 3.0.0-M3)在运行mvn清洁包时似乎正在下载同一依赖项(plexus-utils)的多个版本,即使我在依赖项中指定了plexus-utils的最新版本。这不会导致任何错误,但3.0.16之前的任何版本的plexus-utils都容易受到命令注入的影响。有没有办法阻止这种情况

  • 根据Maven文档,将使用依赖项中介来决定使用哪个依赖项: 因此,假设我们首先声明依赖项,那么1.0版将在我们的应用程序中使用。这意味着依赖项将在运行时使用1.0版,而as是根据2.0版编译的。如果使用的是2.0版的一些特性,那么我们将会得到一个运行时错误(,等),这是不好的。 因此要“修复”这一点,我们可以从依赖项中排除依赖项,从而使用2.0版本。但是哦不!2.0版不向后兼容,因此我们最终会从得

  • 我遇到了以下两个依赖项的问题: org.apache.felix"org.apache.felix.utils" 和 通用域名格式。github。rotty3000»phidias»0.3.2 它们都对组织有可传递的依赖关系。奥斯基。核心,felix依赖于版本4.1.0,phidias依赖于版本5.0.0 我们需要5.0.0版本才能正确编译代码 如果我把我的依赖项作为: Maven自动获取版本4.

  • 问题内容: 我正在为Java中的ERP系统进行定制。在我的定制中,我想使用Apache POI 3.10.1。因此,我集成了jars poi-3.10.1-20140818.jar和poi-ooxml-3.10.1-20140818.jar。 但是,这些jar包含几个类,这些类已经包含在ERP系统的核心代码中,但是有所不同。 如果核心ERP类覆盖POI类,则定制将引发运行时异常。如果POI类覆盖核

  • 问题:Maven在我的测试中找不到一些依赖项 在我的pom中是这样导入的。xml: 我已经试过了: mvn测试编译 使Intellij缓存无效 重启Intellij 清除. m2并重建项目

  • 我想在eclipse下处理同一个多模块maven项目的两个不同版本。 不幸的是,当您在eclipse下导入多模块maven项目时,您可以自己更改父模块项目名称以防止冲突,但不能更改子模块项目名称。子模块作为根项目导入,以模块名称命名。显然在导入过程中无法重命名它们。 在理想情况下,我希望保持pom不变。显然,我希望保持相同的eclipse工作区。。。