我有一个循环的程序:
- 结帐
- 使用 MavenCli 构建项目
- 使用 Findbugs 进行分析
但是,MavenCli.doMain 只工作一次并返回 1 秒。
Pom 文件:
<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>
代码:
public class AnalysisRunner {
private static final MavenCli MAVEN_CLIENT = new MavenCli();
private static final String[] MAVEN_BUILD_COMMAND = {"clean", "install"};
public void runMavenBuild() {
System.out.println(MAVEN_CLIENT.doMain(MAVEN_BUILD_COMMAND, LOCAL_REPOSITORY.getAbsolutePath(), System.out, System.out));
}
}
第一次迭代maven的输出:
0
第二次迭代maven的输出:
1
另外,我在 Maven-embedder 源中发现了这一点:
catch( ExitException e )
{
return e.exitCode;
}
catch ( UnrecognizedOptionException e )
{
// pure user error, suppress stack trace
return 1;
}
catch ( Exception e )
{
CLIReportingUtils.showError( logger, "Error executing Maven.", e, cliRequest.showErrors );
return 1;
}
我想我忘了关闭 smth 但是什么和在哪里?
我找到的最佳解决方案:
是使用Maven Invoker而不是 maven-embedder。