You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Maven Shade插件:如何确定需重定位的依赖包?

解决未提供Shade配置的依赖打包问题
  • 直接查看依赖Jar的内部结构
    不管用解压工具还是命令行,直接查看Jar里的包层级就能确定要shade的路径:

    • 用解压工具(如7-Zip)打开依赖Jar,根目录下的文件夹结构对应包路径,比如看到com/github/stefvanschie/inventoryframework,对应的pattern就是com.github.stefvanschie.inventoryframework。
    • 命令行执行:jar tf your-dependency.jar,输出结果里找最顶层的包前缀,比如开头的com/github/xxx对应的就是完整包名。
  • 用IDE快速定位包路径
    在IntelliJ或Eclipse中,打开项目依赖列表,找到目标库,展开查看其中任意类的全限定名,比如类GuiItem的全名为com.github.stefvanschie.inventoryframework.gui.GuiItem,那么要shade的顶级包就是com.github.stefvanschie.inventoryframework。

  • 确认shade范围,避免冗余
    大部分情况需要shade整个库的包,但如果库依赖了Guava、Apache Commons这类公共库,不要把这些也shade进去(除非系统环境完全不提供)。可以通过Jar内的pom.xml(如果包含)或META-INF/MANIFEST.MF查看依赖信息,排除公共依赖的shade操作。

  • Shade插件配置要点
    以Maven为例,配置时注意用自己项目的专属路径作为shade目标,避免和其他插件冲突:

    <relocation>
        <pattern>找到的依赖顶级包</pattern>
        <shadedPattern>你的项目包.shaded.依赖别名</shadedPattern>
    </relocation>
    

    比如你的项目包是com.yourplugin,可以写成com.yourplugin.shaded.inventoryframework。同时用<includes>限定shade范围,避免误包含其他内容:

    <includes>
        <include>找到的依赖顶级包.**</include>
    </includes>
    
  • 构建后验证
    打包完成后,解压自己的Jar文件,检查是否存在shadedPattern对应的包结构,同时确认原依赖的包路径已经不存在,避免类加载冲突。最后放到目标系统中运行,验证是否解决ClassNotFoundException问题。

内容的提问来源于stack exchange,提问作者user14647130

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 02:10:51