我在我的程序中使用Maven embedder 3.3.3以编程方式运行maven目标,每次运行MavenCli.doMain
方法时都会出现以下错误:
未设置
-Dmaven.multiModuleProjectDirectory
系统属性。检查$M2_HOME
环境变量和mvn
脚本匹配。
答案 0 :(得分:7)
自Maven 3.3.1以来,有一个名为maven.multiModuleProjectDirectory
的新系统属性。它由mvn
(or mvn.bat
)脚本默认设置为项目的根目录(项目基础目录)(这就是为什么你以前从未遇到过这样的错误)。
因此,在通过maven-embedder
运行Maven时,您还需要设置此系统属性(请参阅source code进行检查)。它需要设置为项目根目录。
要设置此系统属性,您可以将调用调整为doMain
并添加
"-Dmaven.multiModuleProjectDirectory=" + projectRoot
给定的参数。一个例子是
int result = cli.doMain(new String[] { "-Dmaven.multiModuleProjectDirectory=" + projectRoot, "install" }, "/path/to/project", System.out, System.err);
或者,您可以致电:
System.setProperty("maven.multiModuleProjectDirectory", projectRoot);
在调用MavenCli.doMain
方法之前,其中projectRoot
指向您正在构建的项目的根目录。