【Springboot】打包jar文件瘦身

561 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

背景技术

  • 随着Spring Boot的流行,越来越多开发者选择使用Spring Boot来发布Web应用。不同于传统的War包发布,Spring Boot把整个项目打包成一个可运行的Jar包,导致了这个Jar包很大(通常有50MB+)。
  • 如今迭代发布时经常需要每次都上传一个如此庞大的文件,网速又不达标的情况下会浪费很多时间。
  • SpringBoot 部署起来虽然简单,如果服务器部署在公司内网,速度还行。
  • 但是如果部署在公网(阿里云等云服务器上),部署起来实在头疼:因为编译出来的 Jar 包很大,如果工程引入了许多开源组件(SpringCloud 等),那就更大了。
  • 这个时候如果想要对线上运行工程有一些微调,则非常痛苦

解决方案

  • 用mvn package正常打出jar包,可能有几百兆大小,其中lib依赖占了绝大多数
  • 这里需要完整打包一次再通过压缩软件将 BOOT-INF 下的 lib 包拿出单独存放,
  • 后续只要pom依赖没有更新,则在pom中借助插件将jar包去除,每次只需要上传无lib依赖的jar压缩包到服务器上面即可
  • 再次用 mvn package 打出来的包就不包含lib了
  • 每次上传打包文件就不用一直传依赖包了,除非依赖有更新或者是变动才需要重新上传,能大大减少打包文件的体积。
<plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>2.4.1</version>
                <configuration>
                    <!--借助插件分离lib目录,减小jar包体积。依赖更新时需要及时更新分离的lib包-->
                    <mainClass>com.cfl.jd.JDApplication</mainClass>
                    <layout>ZIP</layout>
                    <includes>
                        <include>
                            <!-- 排除所有Jar -->
                            <groupId>nothing</groupId>
                            <artifactId>nothing</artifactId>
                        </include>
                    </includes>
                </configuration>
</plugin>
  • 运行jar包命令为
java -Dloader.path=lib包的路径 -jar jar包的名字.jar