E 'possibile chiamare gli obiettivi Maven da Java, per esempio, posso fare l'equivalente di:Calling obiettivi Maven da Java
mvn clean package
da una classe Java?
grazie, Nick
E 'possibile chiamare gli obiettivi Maven da Java, per esempio, posso fare l'equivalente di:Calling obiettivi Maven da Java
mvn clean package
da una classe Java?
grazie, Nick
assolutamente, è necessario utilizzare il Maven Embedder API.
collegamento aggiornato è http://maven.apache.org/ref/3-LATEST/maven-embedder/index.html
non mi consiglia di utilizzare MAVEN CLI
perché funziona in modo diverso il confronto di comandare alternativa la linea. Per esempio:
Con CLI, voglio riprodurre "mvn dependency:resolve validate"
cli.doMain(
new String[]{
"dependency:resolve", // download deps if needed
"validate"}, // just validates, no need even to compile
projectPath ...
Ma in realtà andrà su tutte le cartelle (ricorsivamente) e cercherà di convalidare tutti i progetti c'è anche se io non lo voglio . Se qualcosa non va - fallisce.
Se, però, si tenta di fare lo stesso solo con la linea di comando - è richiamerà solo pom.xm e volontà finitura con successo (anche se qualche progetto dentro 'ProjectPath' non è risolvibile
Con. CLI
non riuscivo ad usare "-f" bandiera per specificare particolare pom.xml
Questo è abbastanza buono per me:!
private int resolveAsCommandLine() {
try {
String command = "mvn " +
"-f " + projectPath + "\\pom.xml " +
"-Dmaven.repo.local=" + localRepoPath + "\\repository " +
"-Dmaven.test.skip=true " + // ignore tests
"dependency:resolve " + // download deps if needed
"validate";
System.out.println("%> Executing command: '" + command + "'...");
Process p = Runtime.getRuntime().exec(// "cmd - for windows only"
"cmd /c " + command
);
BufferedReader in = new BufferedReader(
new InputStreamReader(p.getInputStream()));
String line = "";
while ((line = in.readLine()) != null) {
System.out.println(line);
if(line.contains("[ERROR]")) return ERROR_STATUS;
if(line.contains("BUILD FAILURE")) return ERROR_STATUS;
if(line.contains("BUILD SUCCESS")) return OK_STATUS;
}
in.close();
} catch (IOException e) {
e.printStackTrace();
return ERROR_STATUS;
}
return ERROR_STATUS;
}
La tua risposta è vecchia, quindi è probabile che sia migliorato il modo in cui è stato generato l'errore. Ora, l'opzione '-f' funziona in modo fantastico, anche con il software embedded. Ho usato un percorso assoluto (non ho mai provato un percorso relativo). – djeikyb
Questo è facile :)
codiceJava
MavenCli cli = new MavenCli();
cli.doMain(new String[]{"clean", "package"}, "project_dir", System.out, System.out);
configurazione del progetto:
<dependencies>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-embedder</artifactId>
<version>3.1.1</version>
</dependency>
<dependency>
<groupId>org.eclipse.aether</groupId>
<artifactId>aether-connector-wagon</artifactId>
<version>0.9.0.M2</version>
</dependency>
<dependency>
<groupId>org.apache.maven.wagon</groupId>
<artifactId>wagon-http-lightweight</artifactId>
<version>2.5</version>
</dependency>
</dependencies>
esempio completamente funzionante: https://github.com/mariuszs/maven-cli-example
+1 Grazie, potrei avere bisogno di questo. – KLE
Grazie - quello dovrebbe fare il trucco! – eldoctoro
Potrebbe non essere più la risposta corretta. Sembra che maven-embedder sia scomparso da Maven3: http://stackoverflow.com/questions/4206679/can-anyone-give-a-good-example-of-using-org-apache-maven-cli-mavencli-programatt – jbandi