2015-10-28 64 views
5

我使用Maven嵌入3.3.3在我的计划,以编程方式运行Maven目标,每次我碰到下面的错误,我运行MavenCli.doMain方法:无法通过MavenCli(Maven的嵌入)来运行Maven任务

-Dmaven.multiModuleProjectDirectory系统属性未设置。检查$M2_HOME环境变量和mvn脚本匹配。

+0

那么,你是否将'-Dmaven.multiModuleProjectDirectory'设置为项目基地? – Tunaki

+0

我能够在我的系统上运行Maven命令。我从来没有得到这个错误 –

回答

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你正在构建的项目的根。

+0

对于Maven Embedder 3.5.2,'doMain'选项不起作用,因为在对参数进行属性解析之前进行了检查。 – Mirvnillith