java - 使用 Maven 3 API 进行编程构建

标签 java maven

在你问为什么我只能生成一个进程来执行 mvn 之前,我希望通过 Maven API 执行 Maven 构建,这样我就可以收集有关构建中发生的事情、生成的 Artifact 等的信息。之后根据 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);
}

但是由于空指针异常,此代码在 maven.execute 处失败。由于 DefaultMaven 中的私有(private)字段没有被初始化,这些空指针异常基本上无处不在。它们都带有 @Required 注释,所以我猜这与 Plexus 有关。

我怎样才能成功地使用 Maven 来执行这样的构建?

最佳答案

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

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

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

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

关于java - 使用 Maven 3 API 进行编程构建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14275841/

相关文章:

Java 8 版本 - 带条件的列表映射

java - 为 Web 服务建模请求和响应对象的设计模式

eclipse - m2eclipse 和/或 wtp 未正确打包依赖项?

java - 定义命名空间时,使用 Maven 创建的架构验证 XML 失败

java - 具有不同树的同一个 jar 的依赖关系

java - 随机调用文本文件中不同命令的百分比

java - 无法执行dex : Multiple dex files define Ljavax/ws/rs/core/MultivaluedMap exception

java - 如何覆盖 JUnit 测试套件的默认输出

java - 我在 tomcat7 服务器中遇到端口问题 在 http ://localhost:8080/but actual port is 8090 using maven project 上运行 war

java - Amazon SQS 旧配置文件格式警告