简短版本
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.jar
和groovy-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
答案 0 :(得分:0)
maven shade plugin
确实可以满足我的需要(感谢@tim_yates提供信息!)
但是,当前版本的插件与Groovy的最新版本不太兼容,因为ExtensionModule文件的位置已更改。
我已提交拉取请求:https://github.com/apache/maven-shade-plugin/pull/28