使用maven-shade-plugin构建胖jar时,同一路径上的文件之间可能存在冲突,但源自不同的依赖项。类似地,当它们并排放置在阴影中的公共位置时,很难区分位于各个依赖项(LICENSE.txt,本机库,...)根目录的各种特定于依赖项的文件的来源。广口瓶中。
maven-shade-plugin本身和类似的jarjar-maven-plugin似乎提供了自动重定位类的功能,但不提供依赖项中的其他文件,例如以下示例中所示的文件:
/
- NOTICE
- magic.gz
- LICENSE.txt
- LICENSE
- asm-license.txt
/ META-INF
- LICENSE.TXT
- about.html
/ com.some.library
<class files>
/ com.some.other.library
<class files>
/ com.some.third.library
<class files>
这是我刚刚开始的项目的一个例子。上面的文件都没有被我添加,但都来自我正在使用的各种流行的第三方库。我想通过让Maven在一个通用的包结构中重新组织文件来清理这个混乱,如下例所示:
/
/ com.some.library
<class files>
- NOTICE
- LICENSE
/ META-INF
- about.html
/ com.some.other.library
<class files>
- magic.gz
- LICENSE.txt
/ com.some.third.library
<class files>
- asm-license.txt
/ META-INF
- LICENSE.TXT
我有很多依赖项,因此我不考虑使用硬编码文件名编写特定于依赖项的过滤器/重定位器/ ...这是解决此问题的好方法。
如何自动组织着色jar中依赖项的所有文件?理想情况下,通过从依赖项之后命名的子文件夹中的依赖项重定位所有文件。
答案 0 :(得分:0)
这听起来不像是Maven的最佳实践......但据说可能的一种方法是基于maven-shade-plugin创建自己的Maven插件。代码库非常简单。您可以实现org.apache.maven.plugins.shade.resource.ResourceTransformer
并在org.apache.maven.plugins.shade.DefaultShader
类中调用它时枚举每个Jar&amp; Jar条目(您可以通过jar名称组织资源)。如果你想要一个基本的实现,我会发布一个。