Создание плагина Maven написано на Groovy 1.8

Я пытаюсь создать плагин Maven, используя Groovy. Я хотел бы использовать заводную версию 1.8 или выше.

Я следовал этим инструкциям и получил работу, если я использую:

<groupId>org.codehaus.groovy.maven</groupId>
<artifactId>gmaven-plugin</artifactId>
<version>1.0-rc-4</version>

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

Однако это дает более старую версию groovy (1.5.7). Чтобы перейти на более новую версию, я попытался использовать новую версию и providerSelection:

<plugin>
    <groupId>org.codehaus.gmaven</groupId>
    <artifactId>gmaven-plugin</artifactId>
    <version>1.5</version>
    <executions>
        <execution>
            <goals>
                <goal>generateStubs</goal>
                <goal>compile</goal>
                <goal>generateTestStubs</goal>
                <goal>testCompile</goal>
            </goals>
            <configuration>
                <providerSelection>1.8</providerSelection>
            </configuration>
        </execution>
    </executions>
    <dependencies>
        <dependency>
            <groupId>org.codehaus.gmaven.runtime</groupId>
            <artifactId>gmaven-runtime-1.8</artifactId>
            <version>1.5</version>
            <exclusions>
                <exclusion>
                    <groupId>org.codehaus.groovy</groupId>
                    <artifactId>groovy-all</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.codehaus.groovy</groupId>
            <artifactId>groovy-all</artifactId>
            <version>1.8.0</version>
            <scope>compile</scope> 
        </dependency>
    </dependencies>
</plugin>

Но когда я создаю свой плагин, я получаю предупреждение:

[WARNING] Deprecation Alert:
[WARNING] No mojo descriptors were found in this project which has a packaging type of maven-plugin.
[WARNING] In future versions of the plugin tools, this will fail the build.
[WARNING] If this project is an archetype, change the packaging type from maven-plugin to maven-archetype.

И когда я пытаюсь использовать мой плагин, maven вообще не вызывает мой плагин; Я предполагаю, что это из-за отсутствующих дескрипторов плагинов.

Кто-нибудь смог успешно построить плагин maven с использованием groovy, с версией 1.8 или выше?

PS: я также изучил плагин groovy-eclipse-compiler вместо gmaven, но я, кажется, всегда получаю предупреждение выше.

1 ответ

Решение

Правильно. Если вы прочитаете код, вы обнаружите, что gmaven-mojo жестко запрограммирован для использования Groovy 1.5. Это было сделано для обеспечения максимальной совместимости с потенциальными пользователями вашего плагина (поскольку Groovy 1.6 требует Java 5, а Groovy 2.3 требует Java 6). GMaven больше не поддерживается, так что не ожидайте, что это изменится (извините).

Причина, по которой большинство инструментов (например, задача Ant Grooveyc GMavenPlus) не поддерживает это, заключается в том, что официальные классы моделей Groovy не поддерживают Javadoc (который содержит маркеры, подобные аннотациям в Maven 2). GMaven работал над этим, разветвляя код Groovy внутри. Плагин Groovy-Eclipse для Maven не поддерживает это, потому что он вообще не создает заглушки, поэтому Maven 2 ничего не может использовать для подключения. Интересно, что они также разветвляют код Groovy, но по другим причинам.

Вот ваши варианты:

  1. Используйте GMaven, но не расширяйте GroovyMojo, который был жестко запрограммирован для использования Groovy 1.5 (я раньше этого не делал, поэтому я не уверен на 100%, что это будет работать).
  2. Перейдите на GMaven и измените зависимость gmaven-mojo, чтобы использовать Groovy по вашему выбору.
  3. Используйте Maven 3 и его новые аннотации Java 5 и создайте свой проект с выбором GMavenPlus или groovyc через AntRun (я постарался помочь людям понять их выбор инструментов здесь).

Если вы пойдете по маршруту Maven 3, вам, вероятно, потребуется добавить

<skipErrorNoDescriptorsFound>true</skipErrorNoDescriptorsFound>

к вашей конфигурации maven-plugin-plugin.

Другие вопросы по тегам