2015-10-28 4 views
5

Sto usando Maven embedder 3.3.3 nel mio programma per eseguire gli obiettivi Maven di programmazione e ottengo il seguente errore ogni volta che esegue il metodo MavenCli.doMain:Impossibile eseguire compiti Maven attraverso MavenCli (Maven-embedder)

-Dmaven.multiModuleProjectDirectory proprietà di sistema non impostata. Controllare la variabile di ambiente $M2_HOME e la corrispondenza dello script mvn.

+0

Bene, hai impostato '-Dmaven.multiModuleProjectDirectory' nella base del progetto? – Tunaki

+0

Sono in grado di eseguire comandi Maven sul mio sistema. Non ho mai ricevuto questo errore –

risposta

7

Dal Maven 3.3.1, esiste una nuova proprietà di sistema denominata maven.multiModuleProjectDirectory. È impostato per impostazione predefinita alla radice del progetto (directory di base del progetto) tramite lo script mvn (or mvn.bat) (motivo per cui non si è mai verificato un simile errore prima).

Pertanto, quando si esegue Maven tramite maven-embedder, è inoltre necessario impostare questa proprietà di sistema (vedere source code in cui viene effettuato il controllo). Deve essere impostato sulla radice del progetto.

Per impostare questa proprietà di sistema, è possibile regolare la vostra chiamata a doMain e aggiungere

"-Dmaven.multiModuleProjectDirectory=" + projectRoot 

per gli argomenti dati. Un esempio potrebbe essere

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

In alternativa, è possibile chiamare:

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

prima di invocare MavenCli.doMain metodo, dove projectRoot punti alla base del progetto che si sta costruendo.

+0

L'opzione 'doMain' non funziona per Maven Embedder 3.5.2 poiché il controllo viene eseguito prima che gli argomenti vengano analizzati per le proprietà. – Mirvnillith