【问题标题】:How can I run mvn exec:java from inside Java如何从 Java 内部运行 mvn exec:java
【发布时间】:2025-12-01 12:20:04
【问题描述】:

我想构建一个 JUnit 集成测试,它启动一个 Java 进程(基于 Spring),然后对该进程进行调用。

如果我从命令行调用它,我会通过调用来启动 Java 进程 mvn exec:java -DmainClass=myClass -Dblahblah 来自我的 pom 目录中的命令行

有什么方法可以从我的 Java 测试器类中调用 exec:main,以便我的测试器可以对进程执行调用并验证结果?

【问题讨论】:

标签: java junit maven-3


【解决方案1】:

使用Maven invocation API

代码将类似于以下内容:

InvocationRequest request = new DefaultInvocationRequest();
request.setPomFile( new File( "/path/to/pom.xml" ) );
request.setGoals( Collections.singletonList( "install" ) );

Invoker invoker = new DefaultInvoker();
invoker.execute( request );

【讨论】:

    【解决方案2】:

    您可以使用maven-invoker

    这是你需要的

    InvocationRequest request = new DefaultInvocationRequest();
    request.setPomFile( new File( "/path/to/pom.xml" ) );
    request.setGoals( Collections.singletonList( "exec:java -DmainClass=com.vgrazi.MyClass -Dparam1=value1" ) );
    
    Invoker invoker = new DefaultInvoker();
    invoker.execute( request );
    

    【讨论】: