【问题标题】:How to organize files from dependencies in a Maven shaded jar如何在 Maven 阴影 jar 中组织依赖项中的文件
【发布时间】:2015-05-31 00:31:55
【问题描述】:

当你使用maven-shade-plugin 构建一个fat 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

我有很多依赖项,所以我不认为使用硬编码文件名编写依赖项特定的过滤器/重定位器/...是解决此问题的好方法。

你如何自动组织 all 文件从你的阴影 jar 中的依赖项?理想情况下,通过将依赖项中的所有文件重新定位到以依赖项命名的子文件夹中。

【问题讨论】:

    标签: java maven maven-shade-plugin


    【解决方案1】:

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

    【讨论】:

    • 那么 Maven 最佳实践是什么?如果您认为它可以解决问题,请随时提供实现。
    • 抱歉耽搁了 - 周末很忙。这会破坏根目录中需要资源的 jar。话虽如此,我分叉了 maven-shade-plugin 并对其进行了编辑以支持根资源重定位。这是一个非常基本的实现,但我对一个简单的案例进行了单元测试。在 github.com/aoetalks/shadeplus-maven-plugin 处克隆 repo,然后在 shadeplus-maven-plugin 项目上运行 mvn clean install。在 shadeplus-maven-test-project 中有一个示例项目,您可以在其中比较我的插件和原始的 shade 插件。让我知道它是否适合您。
    • 谢谢!我一定会检查出来的!稍后会报告。
    • 我查看了您的代码。看起来它只重新定位位于阴影 .jar 根目录中的文件。我要问的是“您如何自动组织 all 来自阴影 jar 中的依赖项的文件?理想情况下,通过将依赖项中的所有文件重新定位到以依赖项命名的子文件夹中。”
    • 我的错。由于对根文件行为的描述,我误读了您的请求(我确实发现只有根资源的重定位很奇怪:))我会抓住机会并推动它。
    猜你喜欢
    • 1970-01-01
    • 2013-05-04
    • 1970-01-01
    • 1970-01-01
    • 2015-04-04
    • 2017-12-16
    • 2015-10-26
    • 2021-09-27
    • 1970-01-01
    相关资源
    最近更新 更多