Spring Boot gradle 打包瘦身減少jar包體積 含demo

Spring Boot 1.5.x 打包

demo項目地址
https://gitee.com/youngboyvip/package-example

解決問題

Spring Boot 項目包太大上傳服務器費時

優化原理

把佔空間的 lib 目錄移到外面去,打包時指定loaderPropertiesLauncher,啓動時使用loader.path制定 lib 目錄的位置

參考文檔
bootReapckage 文檔67.3 Packaging executable jar and war files 章節 點我
Spring Boot Loader 原理 E.1 Nested JARs 章節 點我

gradle task寫法

Spring 1.5.x版本適用 2.x版本不適用

configurations {
    mycustomconfiguration //單獨配置configuration
}

dependencies {
    //給mycustomconfiguration 配置依賴,如果你不配那lib/中就不會有jar包
    mycustomconfiguration "org.liquibase:liquibase-core" 
}

//複製依賴jar包的任務,會在build/libs 目錄下面生成lib.zip文件
task copyJars(type: Zip) {
    from(configurations.compile) 
    destinationDir file("build/libs") 
    archiveName "lib.zip"
}

task clientJar(type: Jar) {
    appendix = 'slim'
    from sourceSets.main.output 
    exclude('.*/lib/**') 
    manifest {
        attributes 'Main-Class':'org.springframework.boot.loader.PropertiesLauncher'
    }
}

task bootJar(type: BootRepackage, dependsOn: clientJar) {
    springBoot.layout = 'zip'
    withJarTask = clientJar 
    customConfiguration = "mycustomconfiguration"
}

打包命令 執行bootJar 就ok了

啓動方法

STEP1: 解壓lib.zip 文件到lib文件夾

STEP2: 執行命令

java -Dloader.path="lib/,WEB-INF/classes" -jar 你jar包的名字

Spring Boot 2.x 打包

使用spring-boot-thin-launcher插件打包SpringBoot項目

github地址傳送門

優化原理

使用 ThinJarWrapper 裝載器從jar包 pom.xml/META-INF/mavenMETA-INF/thin.properties路徑中解析出依賴的jar包,

然後從本地倉庫或遠程倉庫拉取jar包,然後使用ThinJarLauncher 運行 Main 函數

使用說明

運行 thinJar 任務打包

運行 java -jar jar包名 啓動

注意事項

別忘了配置 apply plugin: 'maven-publish' 插件,不然不會生成pom文件

文檔參考

文檔

maven 項目參考

使用maven插件即可
文檔

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章