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

Я пытаюсь создать плагин intelliJ, который должен выполнять задачи maven в текущем проекте. Все разговоры в интертубах рекомендует использовать MavenEmbedder. Удачи с этим. Версия 2.0.4 не очень хорошо поддерживается, и нет ссылок на то, как ее использовать.

Я повернул его и врезался в стену, где кодировщик не был инициализирован со всеми необходимыми полями. Светоотражающий укол члена? Потрясающие! Зачем кому-то нужен очевидный способ инициализации объекта?

Кажется, некоторые люди используют версию 2.1 с некоторым успехом. Я не смог найти это в банке или даже источниках.

Я пошел и проверил версию 3.0 проекта embedder: http://maven.apache.org/ref/3.0-beta-3/maven-embedder/ Он полностью устраняет объект MavenEmbedder и, кажется, поддерживает только доступ через методы main или doMain в MavenCli. Кто-нибудь использовал эти методы и может дать какой-нибудь совет?

Ответы [ 5 ]

22 голосов
/ 06 июня 2011

Да, документация 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);

Он берет каталог и запускает фазу компиляции ...

6 голосов
/ 11 ноября 2013

Рабочая конфигурация 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);
4 голосов
/ 25 мая 2015

Информация о матрице зависимостей для предоставленных областей и динамически получаемых компонентов может немного сбивать с толку. Это было для меня, так как мне казалось, что я получил все необходимые элементы по прямой или транзитивной зависимости, но тогда удаленное разрешение не сработало.

Я хотел перейти на Maven 3.3.3 (последний по состоянию на 2015-05-25). Я получил его без ошибок SISU, которые возникали, когда я пытался оптимистично обновить до текущих версий вещей, указанных здесь (и в других местах). Это проект с тегом, который работал с примером, указанным на сегодняшний день с использованием JDK8.

https://github.com/mykelalvis/test-maven-embedder/tree/20150525-working

Соответствующие deps (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 (т. Е. Предложен меньший или более ориентированный на диапазон набор необходимых зависимостей), пожалуйста, опубликуйте их.

0 голосов
/ 09 февраля 2015

Существует матрица зависимостей для каждой версии maven-embedder, например, для 3.2.5: http://maven.apache.org/ref/3.2.5/maven-embedder/dependencies.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.

0 голосов
/ 22 сентября 2013

для построения комментария от @StevePerkins и использования maven версии 3.1.0,

Мне пришлось исключить транзитивную зависимость от эфира-коннектора-универсала к вагон-провайдеру-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");
(...)

полный пример здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...