创建用Groovy 1.8编写的Maven插件

时间:2014-05-28 18:48:24

标签: maven groovy maven-plugin gmaven-plugin

我正在尝试使用groovy创建一个maven插件。我想使用groovy 1.8或更高版本。

如果我使用的话,我已经跟着these instructions并且工作正常:

<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成功构建maven插件,版本为1.8或更高?

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

1 个答案:

答案 0 :(得分:1)

那是对的。如果你阅读the code,你会发现gmaven-mojo被硬编码为使用Groovy 1.5。这样做是为了能够与插件的潜在用户提供最大的兼容性(因为Groovy 1.6需要Java 5而Groovy 2.3需要Java 6)。 GMaven不再维护,所以不要期望改变(抱歉)。

大多数工具(如GMavenPlus Groovyc Ant任务)不支持这一点的原因是Groovy的官方模型类没有保留Javadoc(它持有Maven 2&#39;注释像标记)。 GMaven通过在内部分析Groovy的代码来解决这个问题。 Maven的Groovy-Eclipse插件并不支持这一点,因为它根本不会创建存根,所以Maven 2没有用来进行连接。有趣的是,他们还分叉了Groovy的代码,但出于其他原因。

以下是您的选择:

  1. 使用GMaven,但不要扩展GroovyMojo,它是硬编码的,使用Groovy 1.5(我之前没有这样做过,所以我不是100%肯定它&#39; ll工作)。
  2. 分叉GMaven并更改gmaven-mojo的依赖关系以使用您选择的Groovy。
  3. 使用Maven 3及其新的Java 5 annotations,使用您选择的GMavenPlusgroovyc via AntRun构建项目(我试图帮助人们了解他们的选择工具here)。
  4. 如果你去了Maven 3路线,你可能需要添加

    <skipErrorNoDescriptorsFound>true</skipErrorNoDescriptorsFound>
    

    到你的maven-plugin-plugin配置。