如何从java运行maven?

ajj*_*ain 36 java maven maven-embedder

我想从Java执行maven命令来开发插件.我试过maven-embedder但看起来现在不支持了.是否有人知道可以使用的其他工具?

小智 52

一个简单的调用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 );
Run Code Online (Sandbox Code Playgroud)


Mar*_*szS 15

使用Maven Embedder

Maven嵌入器仍然受支持且易于配置,因此这对您来说是更好的选择.

Java代码

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

项目配置

<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>
Run Code Online (Sandbox Code Playgroud)

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


Sti*_*ens 5

Maven 嵌入器确实不再受支持(只有 hudson 仍在使用它)。但是,就像在 hudson 中一样,还有其他几种运行 maven 的方法。您可以简单地将 maven 作为外部程序运行:

Runtime.getRuntime().exec("mvn clean install");
Run Code Online (Sandbox Code Playgroud)

或者你可以考虑为 maven创建一个ant 脚本。 然后可以将此脚本作为外部程序调用,或者(如果您需要更多控制)将 ant 添加到类路径并调用 Antrunner。

更新

现在再次支持 Maven 嵌入器,因此这是您的最佳选择。