SpringBoot打成jar包瘦身方法總結(jié)
正常打包
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
瘦身方法一:Dloader.path指定依賴包位置
修改maven打包參數(shù)
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<layout>ZIP</layout>
<includes>
<include>
<groupId>nothing</groupId>
<artifactId>nothing</artifactId>
</include>
<include>
<groupId>com.huacloud.tax.rpc</groupId>
<artifactId>common</artifactId>
</include>
</includes>
</configuration>
</plugin>
</plugins>
</build>
- layout
用來配置可執(zhí)行jar包中Main-Class的類型,一定要設(shè)置為 ZIP,使打的jar包中的Main-Class為PropertiesLauncher 。
- includes
將需要保留的jar包,按照groupId和artifactId(注意兩個(gè)都是必填項(xiàng))include進(jìn)來。
nothing 代表不存在的依賴包,意思就是什么依賴包都不引入
common是引入的公共服務(wù)模塊。 maven打包

命令:mvn clean package install ‘-Dmaven.test.skip=true’
查看xxxx.jar里面META-INF目錄下的MANIFEST.MF文件:

Main-Class的值為:PropertiesLauncher
從瘦身前打包中拷貝中l(wèi)ib包
執(zhí)行:java -Dloader.path=“D:\web\lib” -jar xxx-thin.jar
啟動(dòng)參數(shù)loader.path配置外置依賴包的加載路徑
瘦身方法二:配置文件里指定依賴包位置
1.配置
<build>
<finalName>打出jar包的名稱</finalName>
<plugins>
<!-- 1、編譯出不帶 lib 文件夾的Jar包 -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<!--表示編譯版本配置有效-->
<fork>true</fork>
<!--引入第三方j(luò)ar包時(shí),不添加則引入的第三方j(luò)ar不會(huì)被打入jar包中-->
<includeSystemScope>true</includeSystemScope>
<!--排除第三方j(luò)ar文件-->
<includes>
<include>
<groupId>nothing</groupId>
<artifactId>nothing</artifactId>
</include>
</includes>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
<!-- 2、完成對(duì)Java代碼的編譯,可以指定項(xiàng)目源碼的jdk版本,編譯后的jdk版本,以及編碼 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<!-- 源代碼使用的JDK版本 -->
<source>${java.version}</source>
<!-- 需要生成的目標(biāo)class文件的編譯版本 -->
<target>${java.version}</target>
<!-- 字符集編碼 -->
<encoding>UTF-8</encoding>
<!-- 用來傳遞編譯器自身不包含但是卻支持的參數(shù)選項(xiàng) -->
<compilerArguments>
<verbose/>
<!-- windwos環(huán)境(二選一) -->
<!--<bootclasspath>${java.home}/lib/rt.jar;${java.home}/lib/jce.jar</bootclasspath>-->
<bootclasspath>D:/App/jdk/jdk1.8.0_221/jre1.8.0_221/lib/rt.jar;D:/App/jdk/jdk1.8.0_221/jre1.8.0_221/lib/jce.jar</bootclasspath>
<!-- Linux環(huán)境(二選一) -->
<!--<bootclasspath>${java.home}/lib/rt.jar:${java.home}/lib/jce.jar</bootclasspath>-->
</compilerArguments>
</configuration>
</plugin>
<!-- 3、將所有依賴的jar文件復(fù)制到target/lib目錄 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>prepare-package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<!--復(fù)制到哪個(gè)路徑,${project.build.directory} 缺醒為 target,其他內(nèi)置參數(shù)見下面解釋-->
<outputDirectory>${project.build.directory}/lib</outputDirectory>
<overWriteReleases>false</overWriteReleases>
<overWriteSnapshots>false</overWriteSnapshots>
<overWriteIfNewer>true</overWriteIfNewer>
</configuration>
</execution>
</executions>
</plugin>
<!-- 4、指定啟動(dòng)類,指定配置文件,將依賴打成外部jar包 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<!-- 是否要把第三方j(luò)ar加入到類構(gòu)建路徑 -->
<addClasspath>true</addClasspath>
<!-- 外部依賴jar包的最終位置 -->
<classpathPrefix>lib/</classpathPrefix>
<!-- 項(xiàng)目啟動(dòng)類 -->
<mainClass>org.jeecg.JeecgSystemApplication</mainClass>
</manifest>
</archive>
<!--資源文件不打進(jìn)jar包中,做到配置跟項(xiàng)目分離的效果-->
<excludes>
<!-- 業(yè)務(wù)jar中過濾application.properties/yml文件,在jar包外控制 -->
<exclude>*.properties</exclude>
<exclude>*.xml</exclude>
<exclude>*.yml</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
includeSystemScope:jar包分兩種
- 一種是spring、mybatis等這種項(xiàng)目依賴的
- 一種是手動(dòng)引入的第三方 jar 依賴
如果該參數(shù)不設(shè)置為 true 的話是不能被打包進(jìn)來的
includes:排除項(xiàng)目中所有的 jar
我們需要將打包插件替換為 maven-jar-plugin,然后使用該插件拷貝依賴到 jar 到外面的 lib 目錄
- maven-compiler-plugin:
完成對(duì)Java代碼的編譯,可以指定項(xiàng)目源碼的jdk版本、編譯后的jdk版本,以及編碼,如果不寫這個(gè)插件也是沒問題的,不寫會(huì)使用默認(rèn)的 jdk 版本來處理,只是這樣容易出現(xiàn)版本不匹配的問題,比如本地maven環(huán)境用的3.3.9版本,默認(rèn)會(huì)使用jdk1.5進(jìn)行編譯,而項(xiàng)目中用的jdk1.8的編譯環(huán)境,那就會(huì)導(dǎo)致打包時(shí)編譯不通過。
- maven-dependency-plugin:
作用就是將所有依賴的jar文件復(fù)制到指定目錄下
- maven-jar-plugin:
主要作用就是將maven工程打包成jar包。
- 打包時(shí)排除資源配置文件,
- 排除了配置文件那么項(xiàng)目啟動(dòng)是怎么讀取呢?配置文件有這么一個(gè)默認(rèn)的優(yōu)先級(jí)
當(dāng)前項(xiàng)目config目錄下 > 當(dāng)前項(xiàng)目根目錄下 > 類路徑config目錄下 > 類路徑根目錄下
因此只需要
2.打包:clean package

MANIFEST.MF文件內(nèi)容:


3.啟動(dòng):java -jar xxx.jar
MANIFEST.MF文件指定了依賴包位置所以不需要Dloader.path指定依賴包
總結(jié)
到此這篇關(guān)于SpringBoot打jar包瘦身方法的文章就介紹到這了,更多相關(guān)SpringBoot打jar包瘦身內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 使用springboot 打包插件去除jar包瘦身
- SpringBoot項(xiàng)目Jar包如何瘦身部署的實(shí)現(xiàn)
- SpringBoot瘦身打包部署的實(shí)現(xiàn)
- SpringBoot之瘦身部署的詳細(xì)步驟
- 詳解SpringBoot迭代發(fā)布JAR瘦身配置
- Springboot 使用maven release插件執(zhí)行版本管理及打包操作
- 解決IDEA springboot"spring-boot-maven-plugin"報(bào)紅問題
- IDEA使用Gradle構(gòu)建SpringBoot項(xiàng)目工程的詳細(xì)教程
- SpringBoot?項(xiàng)目瘦身maven/gradle詳解
相關(guān)文章
spring-boot-thin-launcher插件分離jar包的依賴和配置方式
這篇文章主要介紹了spring-boot-thin-launcher插件分離jar包的依賴和配置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09
SpringBoot中使用Quartz管理定時(shí)任務(wù)的方法
這篇文章主要介紹了SpringBoot中使用Quartz管理定時(shí)任務(wù)的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-09-09
java排查一個(gè)線上死循環(huán)cpu暴漲的過程分析
這篇文章主要介紹了java排查一個(gè)線上死循環(huán)cpu暴漲的過程分析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-08-08
Spring?多數(shù)據(jù)源方法級(jí)別注解實(shí)現(xiàn)過程
多數(shù)據(jù)源管理是Spring框架中非常重要的一部分,它可以提高應(yīng)用程序的靈活性和可靠性,從而更好地滿足業(yè)務(wù)需求,這篇文章主要介紹了Spring?多數(shù)據(jù)源方法級(jí)別注解實(shí)現(xiàn),需要的朋友可以參考下2023-07-07
SpringBoot調(diào)用WebService接口的實(shí)現(xiàn)示例
本文主要介紹了SpringBoot調(diào)用WebService接口的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-03-03

