2015-10-28 23 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