Groovy扩展模块+ Maven程序集插件(胖罐)

时间:2019-09-27 16:53:13

标签: maven groovy

简短版本

maven assembly plugin构建jar-with-dependencies时,它会抓住找到的第一个META-INF/groovy/org.codehaus.groovy.runtime.ExtensionModulefile,而忽略所有其他内容。

如何将项目构建为胖子,以便它可以识别所有Groovy扩展类?

长版

我有一个以以下代码开头的常规项目:

def today = new Date().clearTime().toTimestamp()

我的项目构建并运行正常。我现在需要将其打包到一个信封项目中-从技术上讲,以胖子(jar-with-dependencies,使用maven assembly plugin的方式构建一个依赖于我项目的单独项目-并从ALM运行(测试管理软件)。

现在, Groovy 2.5.8 由许多模块组成({groovy-dateutil.jargroovy-sql.jar等-不再有groovy-all.jar可用) ,并且每个模块都有自己的META-INF/groovy/org.codehaus.groovy.runtime.ExtensionModule文件,用于定义扩展程序类。

问题是,当maven程序集插件构建具有依赖关系的jar时,它将获取找到的第一个ExtensionModule文件,而忽略所有其他文件。因此,无论我在项目pom.xml的顶部声明了什么常规依赖,当我运行胖子jar时,该模块的扩展类将对我可用,而其他任何扩展类都将导致项目在运行时失败。我可以使用Date().clearTime()Date().toTimestamp(),但不能同时使用:(

现在,我可以在胖子罐中手动编辑ExtensionModule文件,添加我需要的所有扩展类。但是,每次对mu项目进行更改时,我都需要重新构建它并将其作为一个胖子(115 Mb)进行封装,因此每次手动编辑该文件都会很麻烦。

我尝试将maven程序集插件与'file-aggregate'容器描述符一起使用,但是它添加了每个文件的全部内容,而不是将扩展类添加到了ExtensionClasses=行,因此最终结果没有也不行。我也尝试过使用Maven Shade插件,但是它与Maven程序集插件做的一样。不过,我没有探索其任何高级设置。我还听说有一个Groovy Eclipse maven插件。

我应该使用什么组装所有常规扩展类的胖子罐子?

设置

-Java 11.0.3

-Groovy 2.5.8

-Spock 1.3-groovy-2.5

-IntelliJ IDEA 2019.1

-Maven 3.5

-Maven compiler plugin

-Maven build helper plugin

-Maven assembly plugin 3.8.1

1 个答案:

答案 0 :(得分:0)

maven shade plugin确实可以满足我的需要(感谢@tim_yates提供信息!)

但是,当前版本的插件与Groovy的最新版本不太兼容,因为ExtensionModule文件的位置已更改。

我已提交拉取请求:https://github.com/apache/maven-shade-plugin/pull/28