使用Maven Shade插件创建Fat Jar失败的排查与解决
解决Maven Shade插件无法生成Fat Jar及主清单属性缺失问题
问题场景
我尝试用Maven构建Fat Jar,了解到Shade插件是常用方案,但测试多个示例项目都没成功。于是搭建了一个极简Hello World项目:
- 项目结构:
pom.xml+src/main/java/org/example/Hello.java(代码依赖gnu.getopt.Getopt) - pom.xml中配置了Shade插件,指定在
package阶段执行shade目标,并设置主类为org.example.Hello
异常现象
执行mvn clean package后构建成功,但出现两个问题:
- 生成的Jar不是Fat Jar,未包含依赖的
gnu.getopt类 - 直接运行Jar时提示
no main manifest attribute,必须显式指定类路径才能正常运行,说明Shade插件未按预期执行
最终解决方案
移除pom.xml中包裹Shade插件配置的<pluginManagement>标签,将插件配置直接放在<build><plugins>节点下,重新执行mvn clean package后:
- 生成的Jar包含了所有依赖类,成为标准Fat Jar
- Jar的MANIFEST.MF中自动添加了主类属性,可直接用
java -jar xxx.jar运行
配置示例
错误配置(插件在pluginManagement中)
<build> <pluginManagement> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>3.5.1</version> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> <configuration> <transformers> <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> <mainClass>org.example.Hello</mainClass> </transformer> </transformers> </configuration> </execution> </executions> </plugin> </plugins> </pluginManagement> </build>
正确配置(插件直接在plugins中)
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>3.5.1</version> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> <configuration> <transformers> <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> <mainClass>org.example.Hello</mainClass> </transformer> </configuration> </execution> </executions> </plugin> </plugins> </build>
内容的提问来源于stack exchange,提问作者matrixel
相关产品推荐
相关产品推荐

