如何从java运行maven?

我想从Java执行maven命令来开发一个插件。 我试过mavenembedded式,但看起来像现在不支持。 有人知道一些可以使用的其他工具吗?

一个简单的调用API:maven-invoker。

项目文档: http : //maven.apache.org/shared/maven-invoker/

用法: http : //maven.apache.org/shared/maven-invoker/usage.html

 InvocationRequest request = new DefaultInvocationRequest(); request.setPomFile( new File( "/path/to/pom.xml" ) ); request.setGoals( Arrays.asList( "clean", "install" ) ); Invoker invoker = new DefaultInvoker(); invoker.execute( request ); 

使用Mavenembedded

Mavenembedded器仍然支持,易于configuration,所以这是更好的select。

Java代码

 MavenCli cli = new MavenCli(); cli.doMain(new String[]{"clean", "install"}, "project_dir", System.out, System.out); 

项目configuration

 <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> 

完整的工作示例: https : //github.com/mariuszs/maven-cli-example

Maven embedder确实不再被支持(只有哈德森还在使用它)。 但是,像在哈德森一样,还有其他几种运行maven的方法。 你可以简单地运行Maven作为外部程序:

 Runtime.getRuntime().exec("mvn clean install"); 

或者你可以考虑为maven创build一个ant脚本。 这个脚本可以被称为外部程序,或者(如果你需要更多的控制),将ant添加到你的类path并调用Antrunner。

UPDATE

Maven embedder现在再次被支持,所以这是你最好的select。