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