使用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
。