org.apache.maven.plugins.enforcer.RequireUpperBoundDeps 失败并显示消息:

时间:2021-06-07 19:29:59

标签: java maven

当我运行“mvn clean install”时出现这些错误,解决这个问题的正确方法是什么?我试图将 junit-jupiter 的版本更改为 5.7.0 但它导致更多错误,有人可以帮我吗?

[WARNING] Rule 1: org.apache.maven.plugins.enforcer.RequireUpperBoundDeps failed with message:
Failed while enforcing RequireUpperBoundDeps. The error(s) are [
Require upper bound dependencies error for org.junit.jupiter:junit-jupiter-api:5.5.2 paths to dependency are:
+-my-service:1.0.0-SNAPSHOT
  +-org.junit.jupiter:junit-jupiter-api:5.5.2
and
+-my-service:1.0.0-SNAPSHOT
  +-org.junit.jupiter:junit-jupiter-engine:5.5.2
    +-org.junit.jupiter:junit-jupiter-api:5.5.2
and
+-my-service:1.0.0-SNAPSHOT
  +-org.springframework.boot:spring-boot-starter-test:2.4.1
    +-org.junit.jupiter:junit-jupiter:5.7.0
      +-org.junit.jupiter:junit-jupiter-api:5.5.2 (managed) <-- org.junit.jupiter:junit-jupiter-api:5.7.0
and
+-my-service:1.0.0-SNAPSHOT
  +-org.springframework.boot:spring-boot-starter-test:2.4.1
    +-org.mockito:mockito-junit-jupiter:3.6.28
      +-org.junit.jupiter:junit-jupiter-api:5.5.2 (managed) <-- org.junit.jupiter:junit-jupiter-api:5.4.2
and
+-my-service:1.0.0-SNAPSHOT
  +-org.springframework.boot:spring-boot-starter-test:2.4.1
    +-org.junit.jupiter:junit-jupiter:5.7.0
      +-org.junit.jupiter:junit-jupiter-params:5.7.0
        +-org.junit.jupiter:junit-jupiter-api:5.5.2 (managed) <-- org.junit.jupiter:junit-jupiter-api:5.7.0
, 

2 个答案:

答案 0 :(得分:1)

Maven 使用最近定义规则确定工件版本。也就是说,它使用依赖项树中与您的项目最接近的依赖项版本。您始终可以通过在项目的 POM 中明确声明来保证版本。请注意,如果两个依赖版本在依赖树中的深度相同,则第一个声明获胜。

示例:最浅的一个获胜。

Your project dependencies
 ​+-A
   ​+-B
     ​+-C
       ​+-D-2.0
 ​+-E
   ​+-D-1.0    <- This version is used for artifact D as this is "nearest".

解决方案将 pom.xml 中的版本更新为输出中列出的最新版本,即在您的情况下为 5.7.0

您可以打印依赖关系树 mvn dependency:tree 并查看实际发生冲突的位置。

答案 1 :(得分:0)

该规则似乎强制执行 common upper bounds for a set of dependencies:这可用于实现二进制兼容性(例如:确保您不使用与您使用的传递依赖项不兼容的较低版本,因为它的版本会更大)。

[WARNING] Rule 1: org.apache.maven.plugins.enforcer.RequireUpperBoundDeps failed with message:
Failed while enforcing RequireUpperBoundDeps. The error(s) are [
Require upper bound dependencies error for org.junit.jupiter:junit-jupiter-api:5.5.2 paths to dependency are:
+-my-service:1.0.0-SNAPSHOT
  +-org.junit.jupiter:junit-jupiter-api:5.5.2
and
+-my-service:1.0.0-SNAPSHOT
  +-org.junit.jupiter:junit-jupiter-engine:5.5.2
    +-org.junit.jupiter:junit-jupiter-api:5.5.2
and
+-my-service:1.0.0-SNAPSHOT
  +-org.springframework.boot:spring-boot-starter-test:2.4.1
    +-org.junit.jupiter:junit-jupiter:5.7.0
      +-org.junit.jupiter:junit-jupiter-api:5.5.2 (managed) <-- org.junit.jupiter:junit-jupiter-api:5.7.0

spring boot 正在导入 5.7.0 版本的 junit,但您已指定 junit 5.5.2。

尽量使用最高版本(例如:5.7.0)。