【问题标题】:How to get build status when using the maven invoker?使用 maven 调用程序时如何获取构建状态?
【发布时间】:2020-10-21 15:06:42
【问题描述】:

我正在开发一个插件来验证 maven 项目是否编译,我正在使用 maven 调用程序在每个项目上运行 install 目标,但我没有找到如何从中获取构建结果,这里是我正在尝试使用的代码示例:

private void verify(File file) {
    Invoker invoker = new DefaultInvoker();
    InvocationRequest request = new DefaultInvocationRequest();
    request.setGoals(Collections.singletonList("install"))
    .setMavenOpts("-Dmaven.test.skip=true")
    .setBaseDirectory(file).
    setBatchMode(true);
    try {
        invoker.execute(request);
    } catch (Exception e) {
        failedToCompileList.add(file.getAbsolutePath());
        getLog().error(e);
    }
}

【问题讨论】:

    标签: java maven maven-3 maven-plugin


    【解决方案1】:

    Usage page,你只需要检查execute语句的结果:

    InvocationResult result = invoker.execute( request );
     
    if ( result.getExitCode() != 0 )
    {
        throw new IllegalStateException( "Build failed." );
    }
    

    这将从调用结果中检索退出代码,如果它不为 0(传统的全清除代码)则抛出异常。请注意,我们可以通过将 InvocationOutputHandler 实例添加到调用程序或请求来捕获构建输出。

    将此添加到您的示例中将是:

    private void verify(File file) {
        Invoker invoker = new DefaultInvoker();
        InvocationRequest request = new DefaultInvocationRequest();
        request.setGoals(Collections.singletonList("install"))
        .setMavenOpts("-Dmaven.test.skip=true")
        .setBaseDirectory(file).
        setBatchMode(true);
        try {
            InvocationResult result = invoker.execute(request);
            if ( result.getExitCode() != 0 )
            {
                throw new IllegalStateException( "Build failed." );
            }
        } catch (Exception e) {
            failedToCompileList.add(file.getAbsolutePath());
            getLog().error(e);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2023-01-10
      • 1970-01-01
      • 1970-01-01
      • 2012-07-05
      • 2017-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-13
      相关资源
      最近更新 更多