Установите собственный плагин maven из локальной банки в локальный репозиторий с зависимостями

У меня есть плагин maven, который я не залил в центральный репозиторий, но который хочу использовать в своих проектах.

Что работает

Я могу установить плагин maven следующим образом:

git clone https://github.com/RudolfVonKrugstein/jinja-maven-plugin.git
cd jinja-maven-plugin
mvn install

Затем я могу использовать плагин, подобный этому pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project>
    <modelVersion>4.0.0</modelVersion>

    <groupId>de.wintercloud</groupId>
    <artifactId>sample</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>de.wintercloud</groupId>
            <artifactId>jinja-maven-plugin</artifactId>
            <version>1.0</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>de.wintercloud</groupId>
                <artifactId>jinja-maven-plugin</artifactId>
                <version>1.0</version>
                <executions>
                    <execution>
                        <phase>compile</phase>
                        <goals>
                            <goal>renderjinja</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <outputFile>out.txt</outputFile>
                    <templateFile>templ.jinja</templateFile>
                    <varFile>vars.yaml</varFile>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

Вот другие файлы, относящиеся к компиляции:

темпл.jinja:

{{ Name }}

варс.yaml:

Name: MyWonderfullName

Это работает:

> mvn compile
> cat out.txt 

Мое имя

Хороший!

Что не работает

Теперь я пытаюсь передать плагин в виде jar-файла своим коллегам, чтобы они могли просто установить jar-файл. Идея состоит в том, чтобы сделать это так:

git clone https://github.com/RudolfVonKrugstein/jinja-maven-plugin.git
cd jinja-maven-plugin
mvn package
mvn org.apache.maven.plugins:maven-install-plugin:2.5.2:install-file -Dfile=target/jinja-maven-plugin-1.0.jar

Когда я сейчас это сделаю (в примере проекта)

mvn compile

Я получаю эту ошибку:

[ERROR] Failed to execute goal de.wintercloud:jinja-maven-plugin:1.0:renderjinja (default) on project sample: Execution default of goal de.wintercloud:jinja-maven-plugin:1.0:renderjinja failed: A required class was missing while executing de.wintercloud:jinja-maven-plugin:1.0:renderjinja: org/yaml/snakeyaml/Yaml

Как я могу установить банку, чтобы использовать ее в качестве плагина? Мне кажется, что зависимости отсутствуют. Почему?


person Nathan    schedule 10.10.2016    source источник


Ответы (1)


Вы просто нажимаете MINSTALL-110, что будет исправлено в следующем 3.0. .0 выпуска подключаемого модуля установки Maven. Основная проблема здесь заключается в том, что вы вручную устанавливаете файл JAR с file, плагин обнаруживает, что внутри есть POM, но сохраняет только информация о координатах (идентификатор группы, идентификатор артефакта, упаковка и версия), а не весь POM. Таким образом, при установке POM зависимости не сохраняются.

Действительно, если вы посмотрите на установленный POM, вы увидите

<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <modelVersion>4.0.0</modelVersion>
  <groupId>de.wintercloud</groupId>
  <artifactId>jinja-maven-plugin</artifactId>
  <version>1.0</version>
  <packaging>maven-plugin</packaging>
  <description>POM was created from install:install-file</description>
</project>

что показывает, что зависимости не были сохранены. И если вы посмотрите на журналы Maven в режиме отладки при запуске команды install-file, он покажет

[ОТЛАДКА] Использование META-INF/maven/de.wintercloud/jinja-maven-plugin/pom.xml для идентификатора группы, идентификатора артефакта, упаковки и версии

Обходной путь ожидания версии 3.0.0 это чтобы указать путь к POM-файлу для установки вместе с основным артефактом, указав pomFile. Вместо этого запустите следующее:

mvn org.apache.maven.plugins:maven-install-plugin:2.5.2:install-file -Dfile=target/jinja-maven-plugin-1.0.jar -DpomFile=pom.xml

Тогда будет установлен полный POM, а не универсальная заглушка.

С этим изменением ошибка

[ОШИБКА] Не удалось выполнить цель de.wintercloud:jinja-maven-plugin:1.0:renderjinja (по умолчанию) в примере проекта: выполнение по умолчанию цели de.wintercloud:jinja-maven-plugin:1.0:renderjinja не удалось: требуемый класс был отсутствует при выполнении de.wintercloud:jinja-maven-plugin:1.0:renderjinja: org/yaml/snakeyaml/Yaml

больше не будет. Maven правильно загрузит зависимости и использует их для плагина.

person Tunaki    schedule 10.10.2016