Я хочу выполнить команду maven из Java для разработки плагина. Я попробовал maven-embedder, но похоже, что он теперь не поддерживается. Кто-нибудь знает какой-нибудь другой инструмент, который можно использовать?
Как запустить maven из java?
Ответ 1
Простой API-интерфейс вызова: maven-invoker.
Документация по проекту: http://maven.apache.org/shared/maven-invoker/
Использование: http://maven.apache.org/shared/maven-invoker/usage.html
InvocationRequest request = new DefaultInvocationRequest();
request.setPomFile( new File( "/path/to/pom.xml" ) );
request.setGoals( Arrays.asList( "clean", "install" ) );
Invoker invoker = new DefaultInvoker();
invoker.execute( request );
Ответ 2
Использовать Maven Embedder
Встраивание Maven по-прежнему поддерживается и легко настраивается, поэтому это лучший вариант для вас.
Код Java
MavenCli cli = new MavenCli();
cli.doMain(new String[]{"clean", "install"}, "project_dir", System.out, System.out);
Конфигурация проекта
<dependencies>
<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>
</dependencies>
Полностью рабочий пример: https://github.com/mariuszs/maven-cli-example
Ответ 3
Встраивание Maven действительно больше не поддерживается (только хадсон все еще использует его). Но, как и в hudson, есть несколько других способов запустить maven. Вы можете просто запустить maven как внешнюю программу:
Runtime.getRuntime().exec("mvn clean install");
Или вы могли бы подумать о создании ant script для maven. Этот script может быть затем вызван либо как внешняя программа, либо (если вам нужно больше контроля), добавив ant к вашему пути к классам и вызвав Antrunner.
UPDATE
Теперь приложение Maven теперь поддерживается, так что это ваш лучший вариант.