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

使用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后构建成功,但出现两个问题:

  1. 生成的Jar不是Fat Jar,未包含依赖的gnu.getopt类
  2. 直接运行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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 16:42:52