2015-10-28 6 views
5

Ich verwende Maven Embedder 3.3.3 in meinem Programm auszuführen Maven Ziele programmatisch zu laufen und ich erhalte die folgende Störung jedes Mal, wenn ich laufen die MavenCli.doMain Methode:kann nicht Maven Aufgaben durch MavenCli (Maven-Einbettungs)

-Dmaven.multiModuleProjectDirectory Systemeigenschaft ist nicht festgelegt. Überprüfen Sie $M2_HOME Umgebungsvariable und mvn Skript übereinstimmen.

+0

Nun, haben Sie "-Dmaven.multiModuleProjectDirectory" auf die Projektbasis gesetzt? – Tunaki

+0

Ich kann Maven-Befehle auf meinem System ausführen. Ich habe diesen Fehler nie bekommen –

Antwort

7

Seit Maven 3.3.1 gibt es eine neue Systemeigenschaft namens maven.multiModuleProjectDirectory. Es ist standardmäßig auf den Stamm des Projekts (Projektbasisverzeichnis) durch das mvn (or mvn.bat) Skript eingestellt (deshalb haben Sie noch nie zuvor einen solchen Fehler erlebt).

Daher, wenn Maven über maven-embedder ausgeführt wird, müssen Sie auch diese Systemeigenschaft festlegen (siehe source code, wo die Überprüfung vorgenommen wird). Es muss auf den Projektstamm festgelegt werden.

diese Systemeigenschaft zu setzen, können Sie Ihren Anruf doMain einstellen und

"-Dmaven.multiModuleProjectDirectory=" + projectRoot 

die gegebenen Argumente hinzufügen. Ein Beispiel wäre

int result = cli.doMain(new String[] { "-Dmaven.multiModuleProjectDirectory=" + projectRoot, "install" }, "/path/to/project", System.out, System.err); 

Alternativ sein, Sie können auch anrufen:

System.setProperty("maven.multiModuleProjectDirectory", projectRoot); 

vor MavenCli.doMain Methode, wo projectRoot Punkte Wurzel des Projekts aufrufen Sie bauen.

+0

Die Option 'doMain' funktioniert nicht für Maven Embedder 3.5.2, da die Überprüfung durchgeführt wird, bevor die Argumente für Eigenschaften geparst werden. – Mirvnillith

Verwandte Themen