我正在尝试使用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的代码,但出于其他原因。
选项如下:
- 使用GMaven,但不要扩展GroovyMojo,它是硬编码的,以使用Groovy 1.5(我以前没有这样做过,所以我不能100%确定它会工作)。
- Fork GMaven并更改GMaven -mojo的依赖项以使用你选择的Groovy。
- 使用Maven 3及其新的Java 5注释,并通过AntRun使用您选择的GMavenPlus或groovyc构建您的项目(我试图帮助人们了解他们在这里选择的工具)。
如果您选择Maven 3路线,您可能需要添加
<skipErrorNoDescriptorsFound>true</skipErrorNoDescriptorsFound>