如何在Maven着色jar中组织依赖项中的文件

时间:2015-03-26 20:05:51

标签: java maven maven-shade-plugin

使用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中依赖项的所有文件?理想情况下,通过从依赖项之后命名的子文件夹中的依赖项重定位所有文件。

1 个答案:

答案 0 :(得分:0)

这听起来不像是Maven的最佳实践......但据说可能的一种方法是基于maven-shade-plugin创建自己的Maven插件。代码库非常简单。您可以实现org.apache.maven.plugins.shade.resource.ResourceTransformer并在org.apache.maven.plugins.shade.DefaultShader类中调用它时枚举每个Jar&amp; Jar条目(您可以通过jar名称组织资源)。如果你想要一个基本的实现,我会发布一个。