无法通过 MavenCli (maven-embedder) 运行 maven 任务

Unable to run maven tasks through MavenCli (maven-embedder)

我在我的程序中使用 Maven 嵌入器 3.3.3 以编程方式 运行 Maven 目标,每次我 运行 MavenCli.doMain 方法时我都会收到以下错误:

-Dmaven.multiModuleProjectDirectory system property is not set. Check $M2_HOME environment variable and mvn script match.

因为 Maven 3.3.1, there is a new system property called maven.multiModuleProjectDirectory. It is set by default to the root of the project (project base directory) by the mvn (or mvn.bat) 脚本(所以这就是为什么你以前从未遇到过这样的错误)。

因此,当运行Maven通过maven-embedder时,你还需要设置这个系统属性(查看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 指向您正在构建的项目的根目录。