项目简介
新建一个练习用的项目,其结构如下
ht-cdn
存放的是静态资源(如第三方js、css、images等)ht-domain
项目中的数据实体定义ht-repository
数据层接口及实现ht-service
业务逻辑接口及实现ht-ui-web
Web管理
其中ht-ui-web
依赖于ht-domain
、ht-repository
、ht-service
,实现了一个简单的GetMapping
。
接着打包项目,整个jar包24M这样
瘦身准备
首先我们要对Jar包有一个初步认识,它的内部结构如下
1 | example.jar |
运行该Jar时默认从BOOT-INF/classes
加载class,从BOOT-INF/lib
加载所依赖的Jar包。如果想要加入外部的依赖Jar,可以通过设置环境变量LOADER_PATH
来实现。
如此一来,就可以确认我们的思路了:
- 把那些不变的依赖Jar包(比如spring依赖、数据库Driver等,这些在不升级版本的情况下是不会更新的)从Flat Jar中抽离到单独的目录,如libs
- 在启动Jar时,设置
LOADER_PATH
使用上一步的libs
这样,我们最终打包的jar包体积就大大减少,每次迭代后只需要更新这个精简版的Jar即可。
具体步骤
打包时瘦身
通常我们是用spring-boot-maven-plugin
进行打包,通过阅读文档发现可以通过配置使得该插件在打包时忽略特定的依赖,文档在spring-boot-maven-plugin。
首先备份一下原先的依赖:编译打包成Flat Jar,然后将BOOT-INF/lib
下的除去ht-*
相关的jar文件全部解压出来,另存到libs
目录下。
接着修改pom.xml
配置如下
1 | <build> |
此时打包好的ht-ui-web.jar
只有117kb这样
BOOT-INF/lib下只有ht
相关的jar
运行
由于没有其他依赖,ht-ui-web.jar
是不能如期运行起来的
1 | java -jar ht-ui-web-1.0.jar |
至此我们要设置LOADER_PATH
,如下
1 | java -Dloader.path=libs -jar ht-ui-web.jar |
便可以看到熟悉的Spring Boot 启动信息了。
继续瘦身
上面的项目结构介绍提到了ht-cdn
,我是把前端用到的库都放在这里。然后单独启动一个Web Application。其他项目需要用到静态资源就直接使用。
还有另外一个做法是,把resources/public
直接丢到libs
下(就是跟上一步剥离出来的jar包放在一起),结构如下:
这样也是可以的(不过要注意不能跟真实项目中自己写的静态资源重名)。
结语
经过上面的瘦身,每次迭代开发开的Jar包就显得苗条多了。
插些题外话
Spring Boot 中的 banner.txt
banner是spring boot 应用启动时打印在控制台的彩蛋信息,默认是这样的
1 |
|
想要修改这个文本的话,只需要在resources
下新建banner.txt
即可。这里可以自定义banner:http://patorjk.com/software/taag