1. 问题
srping boot 2.0+ 打包生产的 fat jar 太大了 (40M+), 每次发布的时候实在吃不消, 如果能像 ASP.NET Core 一样每次发布都平铺依赖和 App Assembly, 那我们只需第一次发布完依赖, 之后的更新把 App Assembly 挑出来发布就可以了, 一般 App 只有几十 kb, 传输压力小了几千倍.
2. 解决
网上一般都是用 Maven 那套东西在做, 但是我项目是 gradle 构建的, 不想改了, 搜了半天没看到现成的可以抄的解决方案.
目前只有 spring-boot-thin-launcher 的这个仓库可以用.
3. 代码
具体解释去看原仓库好了, 这里只给出代码
在 build.gradle 的最前面加上:
- buildscript {
- ext {
- springBootVersion = '2.0.1.RELEASE'
- wrapperVersion = '1.0.21.RELEASE'
- }
- repositories {
- mavenLocal()
- mavenCentral()
- }
- dependencies {
- classpath("org.springframework.boot.experimental:spring-boot-thin-gradle-plugin:${wrapperVersion}")
- classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
- }
- }
- apply plugin: 'maven'
- apply plugin: 'io.spring.dependency-management'
- apply plugin: 'org.springframework.boot'
- apply plugin: 'org.springframework.boot.experimental.thin-launcher'
- jar.dependsOn = [thinProperties]
然后运行
gradle thinResolve
生成的代码在./build/thin/root 下, 只需要像正常情况下一样 java -jar myapp.jar 就可以了.
很讨厌在这种配置, 折腾的东西上浪费时间, 没啥技术含量, 但弄不好又非常影响效率.
发布出来希望帮更多的人节省时间.
来源: http://www.jianshu.com/p/53c9c3e6c7cb