使用Maven 3 API进行编程构建

在你问为什么我可以产生一个进程来执行mvn之前,我希望通过Maven API执行一个Maven构建,这样我就可以收集关于构建中发生的事情,产生的工件等的信息等。依赖于org.apache.maven:maven-core:jar:3.0.4 ,我写了以下方法试图做这样的事情:

 public static void build(File directory, File pom) { Maven maven = new DefaultMaven(); MavenExecutionRequest exec = new DefaultMavenExecutionRequest(); exec.setBaseDirectory(directory); exec.setPom(pom); MavenExecutionResult result = maven.execute(exec); MavenProject proj = result.getProject(); Artifact art = proj.getArtifact(); System.out.println(art); } 

但是,由于空指针exception,此代码在maven.execute失败。 由于DefaultMaven私有字段未被初始化,因此这些空指针exception基本上无处不在。 它们都用@Required注释,所以我猜这与Plexus有关。

如何成功使用Maven来执行这样的构建?

您将需要使用实际的Maven嵌入API:

http://maven.apache.org/ref/3.0/maven-embedder/apidocs/index.html

要查看示例,请查看M2Eclipse的开源。

现在,这个组件的命名并不是很好。 它实际上是一个旨在制作CLI的便利包装器。 所以,你要做的就是阅读它的来源。

我从来没有真正使用过这个API,但看起来很有趣。

我看不出你在哪里设定你的目标?

您可能需要在Maven执行请求上调用: setGoals

http://maven.apache.org/ref/3.0.3/maven-core/apidocs/org/apache/maven/execution/DefaultMavenExecutionRequest.html#setGoals%28java.util.List%29