解决SpringBoot jar包太大的问题
程序员文章站
2022-03-02 20:53:38
...
本文主要是解决springboot maven打包jar太大。
springBoot的web应用一般都添加了spring-boot-maven-plugin插件
- <build>
- <plugins>
- <plugin>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-maven-plugin</artifactId>
- </plugin>
- </plugins>
- </build>
打出来的jar包内置了所有的依赖jar, 放在BOOT-INF/lib目录, 所以体积很大.
修改spring-boot-maven-plugin的参数, 使其将内置的jar包exclude掉.
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>1.5.1.RELEASE</version>
<configuration>
<layout>ZIP</layout>
<excludes>
<exclude>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
</exclude>
<exclude> <groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
这样, 打出来的jar中就不会包含被exclude掉的依赖了.注意layout应设置为ZIP,不然后面会出现找不到类的错误.exclude不止一种写法, 其他的exclude方式参见http://docs.spring.io/spring-boot/docs/current/maven-plugin/start-mojo.html.
可以通过mvn dependency:tree命令查看当前项目的依赖.因为依赖的jar已经被排除掉了, FatJar变瘦, 直接运行就会报ClassNotFoundException. 所以还要进行下一步.
可以在公司的parent pom.xml的pluginManagement部分添加spring-boot-maven-plugin的配置, 这样每个web项目就可以继承一套全公司统一的配置.
2. 将上一步exclude掉的jar放到一个外置的目录中. 如:
然后执行如下命令启动应用:
- java -Dloader.path="lib/" -jar common-service.jar
loader.path指向了外置目录,告诉springboot允许从外部加载依赖.
loader.path的更多用法参见:http://docs.spring.io/spring-boot/docs/current/reference/html/executable-jar.html#executable-jar-launching.
可以用mvn dependency:copy-dependencies命令将jar包copy到这个外置目录.
经测试, 经过上面的两个步骤, 笔者的应用从70MB缩小为1.3MB, 极大地缩小了体积.
既缩小了体积, 便于传输, 又很容易地控制依赖jar的版本, 做到全公司统一, 共享同一套依赖集合.
特别地, 如果要讲应用部署到docker中, 需要修改dockerfile, 将依赖目录挂载到docker镜像中, 修改应用的启动命令(可能会是dockerfile的entrypoint),添加loader.path参数, 指向挂载进来的依赖目录. 不建议将依赖ADD到docker镜像, 那样的话docker镜像会很大.
推荐阅读
-
解决vue+springboot前后端分离项目,前端跨域访问sessionID不一致导致的session为null问题
-
springboot解决前后端分离时的跨域问题
-
解决PyCharm import torch包失败的问题
-
解决Ubuntu pip 安装 mysql-python包出错的问题
-
SpringBoot项目中分页插件PageHelper无效的问题及解决方法
-
详解闭包解决jQuery中AJAX的外部变量问题
-
解决Python 命令行执行脚本时,提示导入的包找不到的问题
-
Netty解决粘包和拆包问题的四种方案
-
Win10系统如何利用360压缩软件解决打不开RAR压缩包的问题
-
解决.net项目中上传的图片或者文件太大无法上传问题