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

maven-assembly-plugin高版本打fatjar未包含项目自身类文件问题

maven-assembly-plugin高版本fatjar缺失自身编译类解决方案

问题表现

  • 使用3.2.0、3.4.0、2.2等正式版本maven-assembly-plugin打包fatjar时,target/classes目录下的项目自身编译构件未被打入jar包,仅META-INF/MANIFEST.MF、第三方依赖包内容正常存在
  • 执行类检索命令无任何输出:
jar -tvf target/my-fat-jar.jar | grep Main.class
  • 仅2009年发布的2.2-beta-5版本可正常生成包含自身类的fatjar,无法满足使用新版本插件的需求

问题根因

高版本maven-assembly-plugin默认不会在直接执行assembly:single命令时自动引入当前项目的编译输出,仅当插件目标绑定到Maven标准生命周期的对应阶段时,才会按jar-with-dependencies描述符规则将当前项目构建产物、第三方依赖共同打入fatjar。原有配置仅定义了插件参数,未配置执行绑定,是导致类缺失的核心原因。

修复方案

调整插件配置,新增executions块将single打包目标绑定到package阶段,完整配置如下:

<plugin>
  <artifactId>maven-assembly-plugin</artifactId>
  <version>3.4.0</version>
  <configuration>
    <archive>
      <manifest>
        <addClasspath>true</addClasspath>
        <mainClass>my_package.Main</mainClass>
      </manifest>
    </archive>
    <descriptorRefs>
      <descriptorRef>jar-with-dependencies</descriptorRef>
    </descriptorRefs>
    <!-- 不需要jar包名携带jar-with-dependencies后缀时可开启以下配置 -->
    <!-- <appendAssemblyId>false</appendAssemblyId> -->
  </configuration>
  <executions>
    <execution>
      <id>build-fat-jar</id>
      <phase>package</phase>
      <goals>
        <goal>single</goal>
      </goals>
    </execution>
  </executions>
</plugin>

配置完成后执行标准Maven打包命令即可,不要直接调用assembly:single目标:

mvn clean package

该配置已在3.2.0、3.4.0版本验证通过,生成的fatjar可正常包含自身编译生成的所有类文件。

异常排查

如果配置后仍存在类缺失问题,逐一检查以下配置:

  • 确认编译阶段正常执行,target/classes目录下存在对应编译生成的class文件,无编译跳过、编译失败的情况
  • 若使用自定义assembly描述符,检查描述符内未配置排除当前项目构建输出的规则
  • 检查pom内无全局配置将当前项目构建产物的依赖范围设置为provided导致被插件排除

内容的提问来源于stack exchange,提问作者João Paraná

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 18:27:35