Кто-нибудь может дать хороший пример использования org.apache.maven.cli.mavencli программно?
Вопрос
Я пытаюсь создать плагин Intellij, который необходимо выполнить цели Maven на текущий проект. Все разговоры в метабах рекомендуют использовать Mavenembedder. Удачи с этим. Версия 2.0.4 не поддерживается, и нет никаких ссылок на его использование.
Я дал ему Whirl и побежал в стену, где вспомогательный аппарат не был инициализирован со всеми необходимыми полями. Светоотражающий частный член инъекции? Потрясающий! Зачем кому-то понадобится очевидный способ инициализации объекта?
Кажется, несколько человек используют версию 2.1 с некоторым успехом. Я не смог найти это в банке или даже источниках.
Я пошел и проверил версию 3.0 версию проекта в субстуре: http://maven.apache.org/ref/3.0-beta-3/maven-embedder/ Он сочетается с объектом Mavenembedder все вместе и, похоже, поддерживает только доступ через основные или доменные методы на Mavencli. Кто-нибудь использовал эти методы и может дать несколько советов?
Решение
Да, то не так много на пути документации Mavencli. API значительно проще, но я все еще хотел бы некоторые примеры. Вот тот, который работает ...
MavenCli cli = new MavenCli();
int result = cli.doMain(new String[]{"compile"},
"/home/aioffe/workspace/MiscMaven",
System.out, System.out);
System.out.println("result: " + result);
Требуется реж и бежит «компиляционный» фаза ...
Другие советы
Рабочая настройка Maven для maven 3.1.1
Зависимости
<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>
Код
MavenCli cli = new MavenCli();
cli.doMain(new String[]{"clean", "compile"}, "project_dir", System.out, System.out);
Информация о матрице зависимостей для предоставленных областей и динамически приобретенных компонентов может быть немного запутанной. Это было для меня, поскольку мне показалось, что я получил все необходимые предметы прямой или переходной зависимостью, но затем удаленное разрешение не работало.
Я хотел прыгнуть в Maven 3.3.3 (последние по состоянию на 2015-05-25). Я получил его работать без ошибок SISU, представленных, когда я пытался оптимистично обновить до текущих версий вещей, указанных здесь (и в других местах). Это проект с тегом, который работал с примером, указанным на сегодня с использованием JDK8.
https://github.com/mykelalvis/test-maven-embedder/tree/20150525- Работание
Соответствующие DEP (SLF4J просто так, чтобы я вижу журналы)
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>1.7.5</version>
</dependency>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-embedder</artifactId>
<version>3.3.3</version>
</dependency>
<dependency>
<groupId>org.eclipse.aether</groupId>
<artifactId>aether-connector-basic</artifactId>
<version>1.0.2.v20150114</version>
</dependency>
<dependency>
<groupId>org.eclipse.aether</groupId>
<artifactId>aether-transport-wagon</artifactId>
<version>1.0.2.v20150114</version>
</dependency>
<dependency>
<groupId>org.apache.maven.wagon</groupId>
<artifactId>wagon-http</artifactId>
<version>2.9</version>
</dependency>
<dependency>
<groupId>org.apache.maven.wagon</groupId>
<artifactId>wagon-provider-api</artifactId>
<version>2.9</version>
</dependency>
<dependency>
<groupId>org.apache.maven.wagon</groupId>
<artifactId>wagon-http-lightweight</artifactId>
<version>2.9</version>
</dependency>
Бег это:
rm -r ~/.m2/repository/org/apache/maven/plugins/maven-clean-plugin/
mvn exec:java
Вероятно, должен был сделать его единичным тестом каких-либо.
Если у кого-то превосходное решение для встроенного Maven 3.3.3 (т. Е. Придумали меньший или более ориентированный на диапазон набора необходимых зависимостей), пожалуйста, опубликуйте их.
Чтобы построить на комментарий от @steveperkins и используя Maven версии 3.1.0,
Мне пришлось исключить транзитивную зависимость от эфирно-разъема-вагона в универсал-API-API для его работы.
pom.xml:
(...)
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-embedder</artifactId>
<version>3.1.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.eclipse.aether</groupId>
<artifactId>aether-connector-wagon</artifactId>
<version>0.9.0.M2</version>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.apache.maven.wagon</groupId>
<artifactId>wagon-provider-api</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.maven.wagon</groupId>
<artifactId>wagon-http</artifactId>
<version>2.5</version>
<scope>test</scope>
</dependency>
(...)
А вот пример Java:
(...)
MavenCli cli = new MavenCli();
ByteArrayOutputStream baosOut = new ByteArrayOutputStream();
ByteArrayOutputStream baosErr = new ByteArrayOutputStream();
PrintStream out = new PrintStream(baosOut, true);
PrintStream err = new PrintStream(baosErr, true);
cli.doMain( new String[] { "clean" }, new File("."), out, err );
String stdout = baosOut.toString("UTF-8");
String stderr = baosErr.toString("UTF-8");
(...)
полный пример здесь
Для каждой версии Maven есть матрица зависимости для каждой версии Maven-встраиваемого устройства, например, для 3.2.5: http://maven.apache.org/ref/3.2.5/maven-embedder/dependonds.html.
Основываясь на том, что я должен был использовать org.apache.maven:maven-embedder:jar:3.2.5
, org.apache.maven:maven-aether-provider:jar:3.2.5
, а также org.apache.maven.wagon:wagon-provider-api:jar:2.8
.
Это также исправляет зависимость от очень старой библиотеки Guava, поскольку эта версия использует 18.0.