0

我正在尝试使用 groovy 创建一个 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 根本不会调用我的插件;我猜这是因为缺少插件描述符。

有没有人能够使用 groovy 成功构建一个 1.8 或更高版本的 maven 插件?

PS:我也查看了groovy-eclipse-compiler插件而不是 gmaven,但我似乎总是收到上面的警告。

4

1 回答 1

1

这是正确的。如果您阅读代码,您会发现 gmaven-mojo 被硬编码为使用 Groovy 1.5。这样做是为了它可以为您的插件的潜在用户提供最大的兼容性(因为 Groovy 1.6 需要 Java 5 而 Groovy 2.3 需要 Java 6)。GMaven 不再真正维护,所以不要指望它会改变(抱歉)。

大多数工具(如 GMavenPlus Groovyc Ant 任务)不支持这一点的原因是 Groovy 的官方模型类不保留 Javadoc(它包含 Maven 2 的类注解标记)。GMaven 通过在内部分叉 Groovy 的代码来解决这个问题。Maven 的 Groovy-Eclipse 插件不支持这一点,因为它根本不创建存根,因此 Maven 2 没有任何东西可以用来进行布线。有趣的是,他们也分叉了 Groovy 的代码,但出于其他原因。

这是您的选择:

  1. 使用 GMaven,但不要扩展 GroovyMojo,它被硬编码为使用 Groovy 1.5(我以前没有这样做过,所以我不能 100% 确定它会工作)。
  2. Fork GMaven 并更改 gmaven-mojo 的依赖项以使用您选择的 Groovy。
  3. 使用 Maven 3 及其新的 Java 5注释,并使用您选择的GMavenPlus通过 AntRun的 groovyc 构建您的项目(我试图在这里帮助人们了解他们选择的工具)。

如果您确实走 Maven 3 路线,您可能需要添加

<skipErrorNoDescriptorsFound>true</skipErrorNoDescriptorsFound>

到您的 maven-plugin-plugin 配置。

于 2014-05-29T17:53:12.767 回答