2

我有一个循环的程序:

  1. 结帐
  2. 使用 MavenCli 构建项目
  3. 使用 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。

4

0 回答 0