I have program which in a loop:
- Do checkout
- Build project with MavenCli
- Analyze with Findbugs
But, MavenCli.doMain works only once and return 1 second time.
Pom file:
<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>
Code:
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));
}
}
First iteration maven's output:
0
Second iteration maven's output:
1
Also, I found this in Maven-embedder sources:
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;
}
I think that I forgot to close smth but what and where?
THE BEST SOLUTION I FOUND:
Is to use Maven Invoker instead of maven-embedder.