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