首页 > 解决方案 > 使用 maven 调用程序时如何获取构建状态?

问题描述

我正在开发一个插件来验证 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);
    }
}

标签: javamavenmaven-3maven-plugin

解决方案


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);
    }
}

推荐阅读