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

Maven Shade插件打包后target目录未生成Shaded Jar问题及有效配置

Maven Shade插件打包后Shaded Jar丢失的解决方案

我之前碰到过完全一样的头疼问题:用Maven Shade插件配置打包项目后,target目录里死活找不到生成的shaded jar包;哪怕执行mvn package:shade shade命令时,日志明确输出“Replacing XYZ.jar with XYZ-shaded.jar”,但翻遍target目录就是看不到这个文件。折腾了好一阵,终于找到能解决问题的完整pom配置,分享给大家:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>3.1.1</version>
    <executions>
        <!-- 绑定Shade插件到Maven的package生命周期阶段 -->
        <execution>
            <phase>package</phase>
            <goals>
                <goal>shade</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <!-- 过滤配置,按需调整排除/包含的内容 -->
        <filters>
            <filter>
                <artifact>*:*</artifact>
                <excludes>
                    <!-- 示例:排除不需要的文件,避免签名验证错误 -->
                    <exclude>META-INF/*.SF</exclude>
                    <exclude>META-INF/*.DSA</exclude>
                    <exclude>META-INF/*.RSA</exclude>
                </excludes>
            </filter>
        </filters>
        <!-- 可选配置:自定义shaded jar的命名规则 -->
        <!--<shadedArtifactAttached>true</shadedArtifactAttached>-->
        <!--<shadedClassifierName>shaded</shadedClassifierName>-->
    </configuration>
</plugin>

关键注意点:

  • 绑定生命周期阶段:这是最容易忽略的核心点!如果没把Shade插件的shade目标绑定到package阶段,插件可能不会自动执行打包逻辑,哪怕手动执行命令也可能出现文件替换后异常丢失的情况。
  • 过滤配置:<filters>部分可以帮你排除不需要打包到jar里的冗余文件(比如签名文件),避免后续项目运行时出现签名验证失败的问题。
  • 自定义jar名称:如果开启<shadedArtifactAttached>true</shadedArtifactAttached>,会同时保留原jar和shaded jar(原jar不变,shaded jar以原jar名-shaded.jar命名);默认配置则是直接替换原jar为shaded版本。

配置好之后,直接执行mvn clean package,就能在target目录里看到生成的shaded jar包了!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:27:06