我有一个循环的程序:
但是,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。