创建用Groovy 1.8编写的Maven插件



我正在尝试使用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构建一个maven插件,使用1.8或更高的版本?

PS:我还研究了groovy-eclipse-编译器插件而不是gmaven,但我似乎总是得到上面的警告。

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

大多数工具(如GMavenPlus Groovyc Ant任务)不支持这一点的原因是Groovy的官方模型类不保留Javadoc(它保存Maven 2的类似注释的标记)。gmmaven通过对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注释,并通过AntRun使用您选择的GMavenPlus或groovyc构建您的项目(我试图帮助人们了解他们在这里选择的工具)。

如果您选择Maven 3路线,您可能需要添加

<skipErrorNoDescriptorsFound>true</skipErrorNoDescriptorsFound>

最新更新