解决SpringBoot jar包太大的问题
- 577
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目录, 所以体积很大.
解决步骤:
1. 修改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镜像会很大.
http://rickgong.iteye.com/blog/2368985
解决SpringBoot jar包太大的问题的更多相关文章
- 解决SpringBoot jar包中的文件读取问题
前言 SpringBoot微服务已成为业界主流,从开发到部署都非常省时省力,但是最近小明开发时遇到一个问题:在代码中读取资源文件(比如word文档.导出模版等),本地开发时可以正常读取 ,但是,当我们 ...
- 解决springboot jar包冲突
直接导入springboot父项依赖,其它相关springboot依赖version不用写,由spring自动依赖. <parent> <groupId>org.springf ...
- 如何解决Maven和SBT下载Jar包太慢
国内:如何解决Maven和SBT下载Jar包太慢 Maven 远程仓库 <mirror> <id>ui</id> <mirrorOf>central&l ...
- SpringBoot Jar包瘦身 - 跟大文件说再见!
前言 SpringBoot部署起来配置非常少,如果服务器部署在公司内网,上传速度还行,但是如果部署在公网(阿里云等云服务器上),部署起来实在头疼.就是 编译出来的 Jar 包很大,如果工程引入了许多开 ...
- DIOCP数据包太大,请在业务层分拆发送
DIOCP数据包太大,请在业务层分拆发送 DIOCP日志记录异常:数据包太大,请在业务层分拆发送...... 跟踪发现,原因在下图:
- spring maven项目解决依赖jar包版本冲突方案
引入:http://blog.csdn.net/sanzhongguren/article/details/71191290 在spring reference中提到一个解决spring jar包之间 ...
- XJar: Spring-Boot JAR 包加/解密工具,避免源码泄露以及反编译
XJar: Spring-Boot JAR 包加/解密工具,避免源码泄露以及反编译 <?xml version="1.0" encoding="UTF-8" ...
- 用好这几个技巧,解决Maven Jar包冲突易如反掌
前言 大家在项目中肯定有碰到过Maven的Jar包冲突问题,经常出现的场景为: 本地运行报NoSuchMethodError,ClassNotFoundException.明明在依赖里有这个Jar包啊 ...
- SpringBoot jar包中资源加载问题
在IDE下调试怎么也没有发现问题,但是部署到服务器上,提示找不到资源,找了半天资料总算是找到了原因: Jar包中的资源加载不能使用File方式,只能使用InputStream方式读取.知道原因就好解决 ...
随机推荐
- SSM商城项目(八)
1. 学习计划 1.solr集群搭建 2.使用solrj管理solr集群 3.把搜索功能切换到集群版 4.添加商品同步到索引库 2. 什么是SolrCloud SolrCloud(solr 云 ...
- Pandas聚合
数据聚合 import pandas as pd from pandas import Series import numpy as np # 准备数据 df = pd.DataFrame([[-0. ...
- 实验吧“解码磁带”的write up
在“实验吧”的做CTF题时遇到的一道题,地址在这里:http://ctf5.shiyanbar.com/misc/cidai.html 因为正在学python,做这道题的时候正好用python写个简单 ...
- Mysql 关键字
ADD ALL ALTER ANALYZE AND AS ASC ASENSITIVE BEFORE BETWEEN BIGINT BINARY BLOB BOTH BY CALL CASCADE C ...
- 数据库常用操作(mysql)
创建 create database 库名 create table 表名(列名 type(varchar(size),int(size),decimal(size,d))) "size&q ...
- FortiGate高校图书馆SSLvpn配置案例
1.组网及需求 某高校有一台FGT系列防火墙放置于互联网出口,拓扑如下图: 现需求通过组建sslvpn web代理模式和隧道模式以实现: 1.web代理模式:能访问 http://lib.xxxx.e ...
- svn 清理失败的解决方法
首先 下载 SQLiteSpy 工具, 解压后如下图所示, 打开 .exe 应用程序,File ,opendatabase 选中wc.db 然后执行 delete from work_qu ...
- RNA-seq差异表达基因分析之TopHat篇
RNA-seq差异表达基因分析之TopHat篇 发表于2012 年 10 月 23 日 TopHat是基于Bowtie的将RNA-Seq数据mapping到参考基因组上,从而鉴定可变剪切(exon-e ...
- HDU 5521.Meeting 最短路模板题
Meeting Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total ...
- 阿里云ECS装LAMP环境
学生计划9.9买个一个ECS,要做PHP开发,所以搭建一个Lamp的环境 1.使用镜像,附件 sh-1.5.5附于文后. 2.一键安装 2.1 输入命令:chmod –R 777 sh-1.5.5 c ...