从反应堆级别运行时Maven执行器问题

时间:2018-06-01 15:58:46

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

使用的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包时工作正常。这是跟踪中唯一的警告消息,导致执行器无法使包构建失败。

2 个答案:

答案 0 :(得分:0)

这是一个已报告的非常老的错误,但似乎没有人对此做任何事情:https://issues.apache.org/jira/browse/MENFORCER-189

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

对我们来说,解决方法是在使用此执行时禁用执行程序插件(其他没有-pl的执行(例如“干净安装”)也可以)

namespace a {
  export interface b {
    foo(): number;
  }
  export class c implements b {
    public foo(): number {
      return 42;
    }
  }
}

const cInstance = new a.c()
cInstance.foo()

修改:
另一个选择是使用“。”指定构建中的反应堆项目。 (注意:这也会包装反应堆)

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

答案 1 :(得分:0)

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

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

即使您正在构建的模块不依赖于构建中的另一个模块,这也会触发一个Reactor构建,该构建将给定模块和父POM一起包括在内,然后可以通过以下方式验证它们之间的关系: Enforcer无需跳过。 (在我的情况下,可以使用Maven 3.6.2。)