【问题标题】:Maven enforcer issue when running from reactor level从反应堆级别运行时的 Maven 强制执行器问题
【发布时间】:2018-11-11 19:40:45
【问题描述】:

使用的 Maven 版本:3.5.2、3.5.3

mvn clean package -pl <root-artifact-id>:<module-name>

说不出来

    [WARNING] Rule 3: org.apache.maven.plugins.enforcer.ReactorModuleConvergence failed with message:
Module parents have been found which could not be found in the reactor.
 module: <artifact:id>:<module-name>:war:1.0-SNAPSHOT

但是从模块级别运行 mvn clean 包时工作正常。这是跟踪中唯一导致执行器无法构建包的警告消息。

【问题讨论】:

标签: java maven-3 microservices maven-enforcer-plugin maven-reactor


【解决方案1】:

这是一个非常古老的错误报告,但似乎没有人对此采取任何措施:https://issues.apache.org/jira/browse/MENFORCER-189

根本原因是它将 -pl 参数中传递的项目的工件 ID(模块名称)与其父项目的工件 ID(反应器)进行比较。这永远不会相同,因此总是会出现此错误。

对我们来说,解决方法是在使用此执行时禁用强制插件(其他没有 -pl 的执行,如“干净安装”很好)

mvn clean install
mvn package -pl module-name -Denforcer.skip=true

编辑:
另一种选择是使用“。”在构建中指定反应器项目。 (注意:这也会打包反应堆)

mnv clean package -pl .,module-name

【讨论】:

    【解决方案2】:

    尝试包含--also-make-am,例如:

    mvn -am -pl <root-artifact-id>:<module-name> clean package
    

    即使您正在构建的模块不依赖于构建中的另一个模块,这也会触发包含给定模块和父 POM 的 Reactor 构建,然后它们的关系可以通过以下方式进行验证执行者不跳过。 (在我的例子中适用于 Maven 3.6.2)。

    【讨论】:

      猜你喜欢
      • 2015-11-22
      • 1970-01-01
      • 2013-05-15
      • 1970-01-01
      • 2016-09-13
      • 2018-07-02
      • 1970-01-01
      • 2011-06-30
      • 1970-01-01
      相关资源
      最近更新 更多