SpringBoot打成jar包瘦身方法總結
正常打包
<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的類型,一定要設置為 ZIP,使打的jar包中的Main-Class為PropertiesLauncher 。
- includes
將需要保留的jar包,按照groupId和artifactId(注意兩個都是必填項)include進來。
nothing 代表不存在的依賴包,意思就是什么依賴包都不引入
common是引入的公共服務模塊。 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
啟動參數(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> <!--引入第三方jar包時,不添加則引入的第三方jar不會被打入jar包中--> <includeSystemScope>true</includeSystemScope> <!--排除第三方jar文件--> <includes> <include> <groupId>nothing</groupId> <artifactId>nothing</artifactId> </include> </includes> </configuration> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin> <!-- 2、完成對Java代碼的編譯,可以指定項目源碼的jdk版本,編譯后的jdk版本,以及編碼 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <!-- 源代碼使用的JDK版本 --> <source>${java.version}</source> <!-- 需要生成的目標class文件的編譯版本 --> <target>${java.version}</target> <!-- 字符集編碼 --> <encoding>UTF-8</encoding> <!-- 用來傳遞編譯器自身不包含但是卻支持的參數(shù)選項 --> <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文件復制到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> <!--復制到哪個路徑,${project.build.directory} 缺醒為 target,其他內置參數(shù)見下面解釋--> <outputDirectory>${project.build.directory}/lib</outputDirectory> <overWriteReleases>false</overWriteReleases> <overWriteSnapshots>false</overWriteSnapshots> <overWriteIfNewer>true</overWriteIfNewer> </configuration> </execution> </executions> </plugin> <!-- 4、指定啟動類,指定配置文件,將依賴打成外部jar包 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <configuration> <archive> <manifest> <!-- 是否要把第三方jar加入到類構建路徑 --> <addClasspath>true</addClasspath> <!-- 外部依賴jar包的最終位置 --> <classpathPrefix>lib/</classpathPrefix> <!-- 項目啟動類 --> <mainClass>org.jeecg.JeecgSystemApplication</mainClass> </manifest> </archive> <!--資源文件不打進jar包中,做到配置跟項目分離的效果--> <excludes> <!-- 業(yè)務jar中過濾application.properties/yml文件,在jar包外控制 --> <exclude>*.properties</exclude> <exclude>*.xml</exclude> <exclude>*.yml</exclude> </excludes> </configuration> </plugin> </plugins> </build>
includeSystemScope:jar包分兩種
- 一種是spring、mybatis等這種項目依賴的
- 一種是手動引入的第三方 jar 依賴
如果該參數(shù)不設置為 true 的話是不能被打包進來的
includes:排除項目中所有的 jar
我們需要將打包插件替換為 maven-jar-plugin,然后使用該插件拷貝依賴到 jar 到外面的 lib 目錄
- maven-compiler-plugin:
完成對Java代碼的編譯,可以指定項目源碼的jdk版本、編譯后的jdk版本,以及編碼,如果不寫這個插件也是沒問題的,不寫會使用默認的 jdk 版本來處理,只是這樣容易出現(xiàn)版本不匹配的問題,比如本地maven環(huán)境用的3.3.9版本,默認會使用jdk1.5進行編譯,而項目中用的jdk1.8的編譯環(huán)境,那就會導致打包時編譯不通過。
- maven-dependency-plugin:
作用就是將所有依賴的jar文件復制到指定目錄下
- maven-jar-plugin:
主要作用就是將maven工程打包成jar包。
- 打包時排除資源配置文件,
- 排除了配置文件那么項目啟動是怎么讀取呢?配置文件有這么一個默認的優(yōu)先級
當前項目config目錄下 > 當前項目根目錄下 > 類路徑config目錄下 > 類路徑根目錄下
因此只需要
2.打包:clean package
MANIFEST.MF文件內容:
3.啟動:java -jar xxx.jar
MANIFEST.MF文件指定了依賴包位置所以不需要Dloader.path指定依賴包
總結
到此這篇關于SpringBoot打jar包瘦身方法的文章就介紹到這了,更多相關SpringBoot打jar包瘦身內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
詳解mybatis-plus使用@EnumValue注解的方式對枚舉類型的處理
這篇文章主要介紹了詳解mybatis-plus使用@EnumValue注解的方式對枚舉類型的處理,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-12-12hotspot解析jdk1.8?Unsafe類park和unpark方法使用
這篇文章主要為大家介紹了hotspot解析jdk1.8?Unsafe類park和unpark方法使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-01-01