Кто-нибудь может дать хороший пример использования org.apache.maven.cli.mavencli программно?

StackOverflow https://stackoverflow.com/questions/4206679

  •  25-09-2019
  •  | 
  •  

Вопрос

Я пытаюсь создать плагин 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top