无法通过 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
指向您正在构建的项目的根目录。
我在我的程序中使用 Maven 嵌入器 3.3.3 以编程方式 运行 Maven 目标,每次我 运行 MavenCli.doMain
方法时我都会收到以下错误:
-Dmaven.multiModuleProjectDirectory
system property is not set. Check$M2_HOME
environment variable andmvn
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
指向您正在构建的项目的根目录。