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

如何使用Maven构建无主类的Fat Jar?

构建无主类的Maven Fat Jar(包含依赖)

方法一:使用Maven Assembly插件

你之前尝试的Assembly插件完全可以实现需求,核心是不要指定主类配置,同时确保打包时包含所有依赖。在项目的pom.xml中添加如下插件配置:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>3.6.0</version>
            <executions>
                <execution>
                    <id>make-assembly</id>
                    <phase>package</phase>
                    <goals>
                        <goal>single</goal>
                    </goals>
                    <configuration>
                        <!-- 打包包含所有依赖的Jar -->
                        <descriptorRefs>
                            <descriptorRef>jar-with-dependencies</descriptorRef>
                        </descriptorRefs>
                        <!-- 关键:显式关闭主类配置,适配类库场景 -->
                        <archive>
                            <manifest>
                                <mainClass>false</mainClass>
                            </manifest>
                        </archive>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

配置完成后,在IntelliJ的Maven侧边栏找到项目的Lifecycle -> package,双击执行即可。构建完成后,target目录下会生成两个Jar包,带-jar-with-dependencies后缀的就是你需要的Fat Jar。

方法二:使用Maven Shade插件(更推荐)

Shade插件是Maven官方推荐的Fat Jar打包工具,配置更简洁,处理依赖冲突的能力更强。同样无需指定主类,配置如下:

<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>
                        <!-- 可选:如需排除特定依赖,可在此添加过滤规则 -->
                        <!-- <filters>...</filters> -->
                        <!-- 不配置主类,跳过Manifest的主类设置 -->
                        <transformers>
                            <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                <!-- 此处不指定mainClass参数即可 -->
                            </transformer>
                        </transformers>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

执行package命令后,target目录下的主Jar包就是包含所有依赖的Fat Jar。若想保留原Jar包不被覆盖,可添加<shadedArtifactAttached>true</shadedArtifactAttached>配置,此时会生成带-shaded后缀的Fat Jar。

验证打包结果

打包完成后,可通过两种方式确认有效性:

  • 直接解压Jar包,检查内部是否包含项目所有类以及依赖库的类文件
  • 将该Jar作为依赖引入其他Java项目,测试能否正常调用类库中的方法

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 05:50:19