有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java为什么maven enforcer插件在maven版本3.6.1中失败,但在3.6.2中通过?

在我的一个项目中,我尝试将DependencyConvergence规则与maven enforcer插件结合使用。我观察到,如果我使用Maven 3.6.1,那么执行器将失败,出现以下错误,但同样的错误也适用于Maven 3.6.2

有人能告诉我Maven 3.6.2中发生了什么变化,导致DependencyConvergence在3.6.2中通过,但在其他低于3.6.2的Maven版本中失败

我已经在GitHub上放置了一个示例项目,在那里可以复制这个问题

Debrajs-MacBook-Air:es-plugins debrajmanna$ java -version
java version "1.8.0_171"
Java(TM) SE Runtime Environment (build 1.8.0_171-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode)

maven enforcer插件-3.0.0-M2

Debrajs-MacBook-Air:es-plugins debrajmanna$ ~/Downloads/apache-maven-3.6.1/bin/mvn validate
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Build Order:
[INFO]
[INFO] es-plugins                                                         [pom]
[INFO] dedup                                                              [jar]
[INFO]
[INFO] -----------------------< org.example:es-plugins >-----------------------
[INFO] Building es-plugins 1.0-SNAPSHOT                                   [1/2]
[INFO] --------------------------------[ pom ]---------------------------------
[INFO]
[INFO] --- maven-enforcer-plugin:3.0.0-M2:enforce (javaversion-dependencyconvergence) @ es-plugins ---
[INFO]
[INFO] -------------------------< org.example:dedup >--------------------------
[INFO] Building dedup 1.0-SNAPSHOT                                        [2/2]
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-enforcer-plugin:3.0.0-M2:enforce (javaversion-dependencyconvergence) @ dedup ---
[WARNING]
Dependency convergence error for com.carrotsearch.randomizedtesting:randomizedtesting-runner:2.7.1 paths to dependency are:
+-org.example:dedup:1.0-SNAPSHOT
  +-org.elasticsearch.test:framework:7.7.1
    +-com.carrotsearch.randomizedtesting:randomizedtesting-runner:2.7.1
and
+-org.example:dedup:1.0-SNAPSHOT
  +-org.elasticsearch.test:framework:7.7.1
    +-org.apache.lucene:lucene-test-framework:8.5.1
      +-com.carrotsearch.randomizedtesting:randomizedtesting-runner:2.7.2

[WARNING]
Dependency convergence error for commons-logging:commons-logging:1.2 paths to dependency are:
+-org.example:dedup:1.0-SNAPSHOT
  +-org.elasticsearch.test:framework:7.7.1
    +-org.elasticsearch.client:elasticsearch-rest-client:7.7.1
      +-org.apache.httpcomponents:httpclient:4.5.10
        +-commons-logging:commons-logging:1.2
and
+-org.example:dedup:1.0-SNAPSHOT
  +-org.elasticsearch.test:framework:7.7.1
    +-org.elasticsearch.client:elasticsearch-rest-client:7.7.1
      +-org.apache.httpcomponents:httpasyncclient:4.1.4
        +-commons-logging:commons-logging:1.2
and
+-org.example:dedup:1.0-SNAPSHOT
  +-org.elasticsearch.test:framework:7.7.1
    +-org.elasticsearch.client:elasticsearch-rest-client:7.7.1
      +-commons-logging:commons-logging:1.1.3
and
+-org.example:dedup:1.0-SNAPSHOT
  +-org.elasticsearch.test:framework:7.7.1
    +-org.elasticsearch.client:elasticsearch-rest-client-sniffer:7.7.1
      +-commons-logging:commons-logging:1.1.3
and
+-org.example:dedup:1.0-SNAPSHOT
  +-org.elasticsearch.test:framework:7.7.1
    +-commons-logging:commons-logging:1.1.3

[WARNING]
Dependency convergence error for org.apache.httpcomponents:httpcore:4.4.12 paths to dependency are:
+-org.example:dedup:1.0-SNAPSHOT
  +-org.elasticsearch.test:framework:7.7.1
    +-org.elasticsearch.client:elasticsearch-rest-client:7.7.1
      +-org.apache.httpcomponents:httpclient:4.5.10
        +-org.apache.httpcomponents:httpcore:4.4.12
and
+-org.example:dedup:1.0-SNAPSHOT
  +-org.elasticsearch.test:framework:7.7.1
    +-org.elasticsearch.client:elasticsearch-rest-client:7.7.1
      +-org.apache.httpcomponents:httpcore:4.4.12
and
+-org.example:dedup:1.0-SNAPSHOT
  +-org.elasticsearch.test:framework:7.7.1
    +-org.elasticsearch.client:elasticsearch-rest-client:7.7.1
      +-org.apache.httpcomponents:httpasyncclient:4.1.4
        +-org.apache.httpcomponents:httpcore:4.4.10
and
+-org.example:dedup:1.0-SNAPSHOT
  +-org.elasticsearch.test:framework:7.7.1
    +-org.elasticsearch.client:elasticsearch-rest-client-sniffer:7.7.1
      +-org.apache.httpcomponents:httpcore:4.4.12

[WARNING]
Dependency convergence error for org.apache.httpcomponents:httpclient:4.5.10 paths to dependency are:
+-org.example:dedup:1.0-SNAPSHOT
  +-org.elasticsearch.test:framework:7.7.1
    +-org.elasticsearch.client:elasticsearch-rest-client:7.7.1
      +-org.apache.httpcomponents:httpclient:4.5.10
and
+-org.example:dedup:1.0-SNAPSHOT
  +-org.elasticsearch.test:framework:7.7.1
    +-org.elasticsearch.client:elasticsearch-rest-client:7.7.1
      +-org.apache.httpcomponents:httpasyncclient:4.1.4
        +-org.apache.httpcomponents:httpclient:4.5.6
and
+-org.example:dedup:1.0-SNAPSHOT
  +-org.elasticsearch.test:framework:7.7.1
    +-org.elasticsearch.client:elasticsearch-rest-client-sniffer:7.7.1
      +-org.apache.httpcomponents:httpclient:4.5.10

[WARNING]
Dependency convergence error for org.apache.httpcomponents:httpcore-nio:4.4.10 paths to dependency are:
+-org.example:dedup:1.0-SNAPSHOT
  +-org.elasticsearch.test:framework:7.7.1
    +-org.elasticsearch.client:elasticsearch-rest-client:7.7.1
      +-org.apache.httpcomponents:httpasyncclient:4.1.4
        +-org.apache.httpcomponents:httpcore-nio:4.4.10
and
+-org.example:dedup:1.0-SNAPSHOT
  +-org.elasticsearch.test:framework:7.7.1
    +-org.elasticsearch.client:elasticsearch-rest-client:7.7.1
      +-org.apache.httpcomponents:httpcore-nio:4.4.12

[WARNING] Rule 0: org.apache.maven.plugins.enforcer.DependencyConvergence failed with message:
Failed while enforcing releasability. See above detailed error message.
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary for es-plugins 1.0-SNAPSHOT:
[INFO]
[INFO] es-plugins ......................................... SUCCESS [  3.047 s]
[INFO] dedup .............................................. FAILURE [  0.856 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  4.131 s
[INFO] Finished at: 2020-08-29T11:41:55+05:30
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-enforcer-plugin:3.0.0-M2:enforce (javaversion-dependencyconvergence) on project dedup: Some Enforcer rules have failed. Look above for specific messages explaining why the rule failed. -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException
[ERROR]
[ERROR] After correcting the problems, you can resume the build with the command
[ERROR]   mvn <goals> -rf :dedup

Maven 3.6.2也同样适用

Debrajs-MacBook-Air:es-plugins debrajmanna$ ~/Downloads/apache-maven-3.6.2/bin/mvn validate
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Build Order:
[INFO]
[INFO] es-plugins                                                         [pom]
[INFO] dedup                                                              [jar]
[INFO]
[INFO] -----------------------< org.example:es-plugins >-----------------------
[INFO] Building es-plugins 1.0-SNAPSHOT                                   [1/2]
[INFO] --------------------------------[ pom ]---------------------------------
[INFO]
[INFO] --- maven-enforcer-plugin:3.0.0-M2:enforce (javaversion-dependencyconvergence) @ es-plugins ---
[INFO]
[INFO] -------------------------< org.example:dedup >--------------------------
[INFO] Building dedup 1.0-SNAPSHOT                                        [2/2]
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-enforcer-plugin:3.0.0-M2:enforce (javaversion-dependencyconvergence) @ dedup ---
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary for es-plugins 1.0-SNAPSHOT:
[INFO]
[INFO] es-plugins ......................................... SUCCESS [  1.743 s]
[INFO] dedup .............................................. SUCCESS [  0.510 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  2.462 s
[INFO] Finished at: 2020-08-29T11:42:06+05:30
[INFO] ------------------------------------------------------------------------

共 (1) 个答案

  1. # 1 楼答案

    它与MENFORCER-195MNG-6713有关,它们是在Maven 3.6.2中修复的bug

    如果您使用的是3.6.2,请小心,因为此区域中有a further regression,直到3.6.3才固定(不影响您的示例)


    我是如何找到这些票的:

    让我们逐一看一下每一个失败。从第一个开始是有意义的:

    Dependency convergence error for com.carrotsearch.randomizedtesting:randomizedtesting-runner:2.7.1 paths to dependency are:
    +-org.example:dedup:1.0-SNAPSHOT
      +-org.elasticsearch.test:framework:7.7.1
        +-com.carrotsearch.randomizedtesting:randomizedtesting-runner:2.7.1
    and
    +-org.example:dedup:1.0-SNAPSHOT
      +-org.elasticsearch.test:framework:7.7.1
        +-org.apache.lucene:lucene-test-framework:8.5.1
          +-com.carrotsearch.randomizedtesting:randomizedtesting-runner:2.7.2
    

    让我们看一下^{}'s POM的相关部分:

    <dependency>
        <groupId>com.carrotsearch.randomizedtesting</groupId>
        <artifactId>randomizedtesting-runner</artifactId>
        <version>2.7.1</version>
        <scope>compile</scope>
        <exclusions>
            <exclusion>
                <artifactId>*</artifactId>
                <groupId>*</groupId>
            </exclusion>
        </exclusions>
    </dependency>
    
    <dependency>
        <groupId>org.apache.lucene</groupId>
        <artifactId>lucene-test-framework</artifactId>
        <version>8.5.1</version>
        <scope>compile</scope>
        <exclusions>
            <exclusion>
              <artifactId>*</artifactId>
              <groupId>*</groupId>
          </exclusion>
        </exclusions>
    </dependency>
    

    显然,我们可以看到Lucene的所有可传递依赖都应该被排除在外。然而,如果我们回到错误的这一部分,Enforcer插件抱怨的2.7.2版本甚至不应该在依赖关系树中

    ...
       +-org.apache.lucene:lucene-test-framework:8.5.1
            +-com.carrotsearch.randomizedtesting:randomizedtesting-runner:2.7.2
    

    当我为Maven的两个版本(3.6.1和3.6.2)打印Maven依赖关系树时,我看到的唯一的randomizedtesting-runner实例是2.7.1版本,所以这里有点可疑

    我的直觉告诉我,通配符排除很可能是罪魁祸首,因此,从那里开始,只需搜索the release notes以查找类似“排除”或“通配符”的内容。结果证明我是对的