2

I have program which in a loop:

  1. Do checkout
  2. Build project with MavenCli
  3. 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.

0 Answers0