推薦@ifu25 的終極瘦身方法: https://weiku.co/article/135/java
以前寫過一個瘦身的土辦法 https://my.oschina.net/formatkm/blog/1822900git
@ifu25 在回覆中提到 spring-boot-thin-launcher
github
如今用spring-boot-thin-launcher
打包插件的高大上形式。這個方法更加自動化,還能夠自動生成pom,在第一運行的時候會自動下載依賴。web
不少時候是在內網環境進行部署,不能鏈接外網下載依賴,這裏主要記錄手動分離出jar依賴的過程。spring
導出依賴的jar到一個目錄的Gradle腳本,運行copyToLib
任務,依賴jar會導出到lib
緩存
task copyToLib(type: Copy) { into "$buildDir/libs/lib" from configurations.runtime }
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: 'io.spring.dependency-management' apply plugin: 'org.springframework.boot' apply plugin: 'org.springframework.boot.experimental.thin-launcher'
就會有一個 thinJar
的Gradle任務,運行就能夠生成不帶依賴的jar包app
java -Djava.ext.dirs=./lib/ -jar web.jar
-Djava.ext.dirs
是指定jar運行時候搜索依賴庫的路徑maven
java -Dthin.root=. -jar web.jar
-Dthin.root
是配置jar下載的緩存目錄spring-boot
搜索jar的目錄頁能夠配置到MANIFEST.MF
文件裏面gradle
生成後須要仔細調試copy出來的依賴jar包,會有些衝突或者缺失,特別是log日誌組件,還有隱含依賴包的版本。
例如: 使用undertow
容器,須要手動添加依賴引用xnio-nio
'org.jboss.xnio:xnio-nio:3.5.6.Final',