【问题标题】:Groovy extension modules + Maven assembly plugin (fat jar)Groovy 扩展模块 + Maven 组装插件(fat jar)
【发布时间】:2019-09-27 16:53:13
【问题描述】:

短版

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

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

加长版

我有一个以这行代码开头的 groovy 项目:

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

我的项目构建并运行良好。我现在需要将它打包到一个信封项目中——从技术上讲,构建一个依赖于我的项目的单独项目,作为一个胖 jar(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-with-dependencies 时,它会抓取它找到的第一个 ExtensionModule 文件,而忽略所有其他文件。因此,无论我在项目的 pom.xml 顶部声明的任何 groovy 依赖项,当我运行 fat jar 时,我都可以使用该模块的扩展类,而任何其他依赖项都会导致项目在运行时失败。我可以拥有Date().clearTime()Date().toTimestamp(),但不能同时拥有:(

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

我尝试使用带有“文件聚合”容器描述符的 maven 程序集插件,但它添加了每个文件的全部内容,而不是将扩展类添加到行 ExtensionClasses=,所以最终结果不会工作。我也尝试过使用 maven shade 插件,但它和 maven 程序集插件做了同样的事情。不过,我没有探索它的任何高级设置。我还听说有一个 Groovy Eclipse maven 插件。

我应该使用什么来组装一个所有 groovy 扩展类都正常工作的胖 jar?

设置

-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

【问题讨论】:

  • 我尝试使用带有 GroovyResourseTransformer 的 maven shade 插件,但它似乎不起作用。单个 Groovy 模块在 META-INF/groovy/org.codehaus.groovy.runtime.ExtensionModule 中有它们的扩展类描述符(强调 meta-inf/GROOVY/),而 GroovyResourceTransformer 似乎聚合了 META-INF/service 中的文件内容/<...>,我的胖罐子里根本不存在!

标签: maven groovy


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2017-08-16
    • 1970-01-01
    • 2015-04-22
    • 2011-02-11
    • 2016-08-21
    • 2016-06-22
    • 2018-03-09
    • 2013-02-28
    • 2016-11-17
    相关资源
    最近更新 更多