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

Maven执行package未生成Fat Jar,单独assembly:single正常,求排查

问题根源

你把maven-assembly-plugin配置放在了<pluginManagement>节点下,这个节点的作用是统一管理插件的版本、配置模板,它并不会让插件自动参与到Maven的构建生命周期中。所以当你执行mvn package时,Maven不会主动调用assembly插件的single目标;而你直接执行mvn assembly:single时,是手动触发了插件的目标,所以能成功生成Fat Jar。

解决方案

有两种常见的修复方式,任选其一即可:

方式1:将插件移到<build>下的<plugins>节点(推荐)

把assembly插件的配置从<pluginManagement>中移出,直接放到<build>的<plugins>里,同时绑定到package生命周期阶段,这样执行mvn package时就会自动触发Fat Jar的构建:

<build>
  <sourceDirectory>src</sourceDirectory>
  <!-- 移除pluginManagement里的assembly配置,放到这里 -->
  <plugins>
    <plugin>
      <artifactId>maven-assembly-plugin</artifactId>
      <version>3.6.0</version> <!-- 建议指定明确版本,避免依赖默认版本带来的问题 -->
      <configuration>
        <archive>
          <manifest>
            <mainClass>com.xyz.main.MainHandler</mainClass>
          </manifest>
        </archive>
        <descriptorRefs>
          <descriptorRef>jar-with-dependencies</descriptorRef> <!-- 生成Fat Jar的关键描述符,你的配置可能遗漏了这个 -->
        </descriptorRefs>
      </configuration>
      <executions>
        <execution>
          <id>make-assembly</id>
          <phase>package</phase> <!-- 绑定到package阶段,打包时自动执行 -->
          <goals>
            <goal>single</goal> <!-- 执行生成Fat Jar的目标 -->
          </goals>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>

方式2:保留<pluginManagement>,在<plugins>里引用插件

如果是多模块项目,需要在父pom统一管理插件配置,可以保留<pluginManagement>里的配置,然后在当前模块的<plugins>节点中引用该插件并绑定生命周期:

<build>
  <sourceDirectory>src</sourceDirectory>
  <pluginManagement>
    <plugins>
      <plugin>
        <artifactId>maven-assembly-plugin</artifactId>
        <version>3.6.0</version>
        <configuration>
          <archive>
            <manifest>
              <mainClass>com.xyz.main.MainHandler</mainClass>
            </manifest>
          </archive>
          <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
          </descriptorRefs>
        </configuration>
      </plugin>
    </plugins>
  </pluginManagement>
  <!-- 引用pluginManagement中的插件,绑定到构建生命周期 -->
  <plugins>
    <plugin>
      <artifactId>maven-assembly-plugin</artifactId>
      <executions>
        <execution>
          <id>make-assembly</id>
          <phase>package</phase>
          <goals>
            <goal>single</goal>
          </goals>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>
验证

修改完配置后,执行mvn clean package,就能在target目录下看到生成的Fat Jar(通常命名为xxx-jar-with-dependencies.jar)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:42:30