Как получить статус сборки при использовании maven invoker?

#java #maven #maven-3 #maven-plugin

#java #maven #maven-3 #maven-плагин

Вопрос:

Я разрабатываю плагин, который проверяет, компилируется ли проект maven или нет, я использую maven invoker для запуска install goal в каждом проекте, но я не нашел, как получить результат сборки, вот пример кода, который я пытаюсь использовать:

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

Ответ №1:

На странице использования вам просто нужно проверить результаты 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);
    }
}