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
相关产品推荐
相关产品推荐

