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

如何用Maven实现将依赖库提取至可执行Jar以解决启动缓慢问题?

解决Maven打包可执行JAR启动缓慢的问题

你用maven-assembly-plugin打包的JAR启动慢,核心原因是它默认会把依赖的JAR包内嵌在主JAR的某个目录下,JVM启动时得从这些嵌套的JAR里逐个加载类,这个过程比直接从本地文件系统加载依赖慢很多——这也是为什么IntelliJ启动快,它直接用本地仓库里的依赖文件。

要实现“将所需库提取到生成的Jar中”,推荐用maven-shade-plugin,它能把所有依赖的.class文件直接合并到你的主JAR里,生成一个真正的“胖JAR”,启动速度会和IntelliJ里一致。

具体配置步骤

  1. 先把pom.xml里的maven-assembly-plugin配置注释或移除(如果不需要保留原有打包方式的话)
  2. 添加maven-shade-plugin的配置到<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>
                <!-- 指定你的主类,作为可执行JAR的入口 -->
                <mainClass>com.yourpackage.YourMainClass</mainClass>
                <transformers>
                    <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                        <mainClass>com.yourpackage.YourMainClass</mainClass>
                    </transformer>
                    <!-- 合并META-INF/services下的文件,避免依赖冲突导致服务加载失败 -->
                    <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
                </transformers>
            </configuration>
        </execution>
    </executions>
</plugin>

打包运行

执行命令:

mvn clean package

打包完成后,target目录下会生成两个JAR:一个是普通的主JAR,另一个是带-jar-with-dependencies后缀的可执行胖JAR,直接运行这个胖JAR即可:

java -jar target/your-project-name-1.0-SNAPSHOT-jar-with-dependencies.jar

注意事项

  • 如果你的依赖中有重复的资源文件(比如同名配置文件),shade插件默认会覆盖,可通过配置ResourceTransformer自定义合并逻辑
  • 胖JAR体积会比assembly打包的JAR大,但启动速度会显著提升,和IntelliJ内运行速度基本一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 01:32:40