springboot打包JAR包瘦身lib和配置文件分離方式
springboot打包JAR包瘦身lib和配置文件分離
最近項(xiàng)目在部署使用的過(guò)程中,傳輸JAR包的時(shí)候發(fā)現(xiàn)JAR包有點(diǎn)大,傳輸速度有點(diǎn)慢。
筆者基于這個(gè)前提對(duì)項(xiàng)目的打包配置進(jìn)行優(yōu)化進(jìn)行探索,一般來(lái)說(shuō)lib是很少修改,配置文件會(huì)根據(jù)需求會(huì)有所變動(dòng),如果講配置文件打進(jìn)JAR生產(chǎn)環(huán)境會(huì)修改等不便等操作。
以下配置再pom.xml中 <build> <plugins>添加相關(guān)配置</plugins></build>
1.指定打包環(huán)境和跳過(guò)編譯單元測(cè)試
<!--定義項(xiàng)目的編譯環(huán)境--> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.8</source> <target>1.8</target> <encoding>UTF-8</encoding> </configuration> </plugin> <!--默認(rèn)執(zhí)行src/test/java路徑下的測(cè)試用例,建議跳過(guò)執(zhí)行--> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <configuration> <skip>true</skip> </configuration> </plugin>
2.JAR打包排除配置文件和lib
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>3.2.0</version> <configuration> <!-- 不打包資源文件,如果放開(kāi)全量JAR也不會(huì)打進(jìn)去--> <!-- <excludes>--> <!-- <exclude>*.yml</exclude>--> <!-- <exclude>*.properties</exclude>--> <!-- </excludes>--> <archive> <manifest> <addClasspath>true</addClasspath> <!-- MANIFEST.MF 中 Class-Path 加入前綴 --> <classpathPrefix>lib/</classpathPrefix> <!-- jar包不包含唯一版本標(biāo)識(shí) --> <useUniqueVersions>false</useUniqueVersions> <!--指定啟動(dòng)入口類(lèi) --> <mainClass>com.xxxx.Application</mainClass> </manifest> <manifestEntries> <!--MANIFEST.MF 中 Class-Path 加入資源文件目錄 --> <Class-Path>./resources/</Class-Path> </manifestEntries> </archive> <outputDirectory>${project.build.directory}</outputDirectory> </configuration> </plugin>
3.如果需要全量包也可以增加如下配置
便于開(kāi)發(fā)環(huán)境打包使用
<!--全量JAR包,最初的打包方式,springboot的默認(rèn)編譯插件,默認(rèn)會(huì)把所有的文件打包成一個(gè)jar,--> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> <configuration> <!--設(shè)置springboot的啟動(dòng)類(lèi)或者是JAR包的啟動(dòng)類(lèi)--> <mainClass>com.xxxx.Application</mainClass> <fork>true</fork> <addResources>true</addResources> <outputDirectory>${project.build.directory}/jar</outputDirectory> </configuration> </plugin>
4.將lib和配置文件單獨(dú)復(fù)制出來(lái)
<!--復(fù)制關(guān)聯(lián)JAR包到指定lib打包目錄 ,target目錄下的文件夾下,按需修改 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <executions> <execution> <id>copy-dependencies</id> <phase>package</phase> <goals> <goal>copy-dependencies</goal> </goals> <configuration> <outputDirectory>${project.build.directory}/lib/</outputDirectory> </configuration> </execution> </executions> </plugin> <!-- 復(fù)制配置文件到指定resources打包目錄 ,target目錄下的文件夾下,按需修改--> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId> <version>3.2.0</version> <executions> <execution> <!-- 復(fù)制配置文件 --> <id>copy-resources</id> <phase>package</phase> <goals> <goal>copy-resources</goal> </goals> <configuration> <resources> <resource> <directory>src/main/resources</directory> <includes> <include>*.yml</include> <include>*.properties</include> </includes> </resource> </resources> <outputDirectory>${project.build.directory}/resources</outputDirectory> </configuration> </execution> </executions> </plugin>
5.全量配置如下,拷貝即用
注意啟動(dòng)類(lèi)的指定:
以下配置再pom.xml中 <build> 添加相關(guān)配置</build>
<!--拆分配置文件和LIB,給JAR瘦身--> <!--啟動(dòng)參考命令,再JAR目錄執(zhí)行,也可以指定絕對(duì)路徑: ${project.build.directory}工程路徑下的target目錄 Dloader.path:加載本地lib Dspring.config.location:加載本地配置 server.port:指定端口 /-/- 這個(gè)有轉(zhuǎn)義,注命令要去掉/ java -Dloader.path=lib/ -jar xxxx.jar /-/-Dspring.config.location=resources/ /-/-server.port=8080 --> <plugins> <!--定義項(xiàng)目的編譯環(huán)境--> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.8</source> <target>1.8</target> <encoding>UTF-8</encoding> </configuration> </plugin> <!--默認(rèn)執(zhí)行src/test/java路徑下的測(cè)試用例,建議跳過(guò)執(zhí)行--> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <configuration> <skip>true</skip> </configuration> </plugin> <!--全量JAR包,最初的打包方式,springboot的默認(rèn)編譯插件,默認(rèn)會(huì)把所有的文件打包成一個(gè)jar--> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> <configuration> <mainClass>com.xxxx</mainClass> <fork>true</fork> <addResources>true</addResources> <outputDirectory>${project.build.directory}/jar</outputDirectory> </configuration> </plugin> <!-- 打JAR包 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>3.2.0</version> <configuration> <!-- 不打包資源文件,如果放開(kāi)全量JAR也不會(huì)打進(jìn)去--> <!-- <excludes>--> <!-- <exclude>*.yml</exclude>--> <!-- <exclude>*.properties</exclude>--> <!-- </excludes>--> <archive> <manifest> <addClasspath>true</addClasspath> <!-- MANIFEST.MF 中 Class-Path 加入前綴 --> <classpathPrefix>lib/</classpathPrefix> <!-- jar包不包含唯一版本標(biāo)識(shí) --> <useUniqueVersions>false</useUniqueVersions> <!--指定springboot啟動(dòng)入口類(lèi) --> <mainClass>com.xxxx</mainClass> </manifest> <manifestEntries> <!--MANIFEST.MF 中 Class-Path 加入資源文件目錄 --> <Class-Path>./resources/</Class-Path> </manifestEntries> </archive> <outputDirectory>${project.build.directory}</outputDirectory> </configuration> </plugin> <!--復(fù)制關(guān)聯(lián)JAR包到指定lib打包目錄 ,target目錄下的文件夾下,按需修改 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <executions> <execution> <id>copy-dependencies</id> <phase>package</phase> <goals> <goal>copy-dependencies</goal> </goals> <configuration> <outputDirectory>${project.build.directory}/lib/</outputDirectory> </configuration> </execution> </executions> </plugin> <!-- 復(fù)制配置文件到指定resources打包目錄 ,target目錄下的文件夾下,按需修改--> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId> <version>3.2.0</version> <executions> <execution> <!-- 復(fù)制配置文件 --> <id>copy-resources</id> <phase>package</phase> <goals> <goal>copy-resources</goal> </goals> <configuration> <resources> <resource> <directory>src/main/resources</directory> <includes> <include>*.yml</include> <include>*.properties</include> </includes> </resource> </resources> <outputDirectory>${project.build.directory}/resources</outputDirectory> </configuration> </execution> </executions> </plugin> </plugins>
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Netty分布式flush方法刷新buffer隊(duì)列源碼剖析
這篇文章主要為大家介紹了Netty分布式flush方法刷新buffer隊(duì)列源碼剖析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-03-03Spring Boot實(shí)現(xiàn)郵件服務(wù)(附:常見(jiàn)郵箱的配置)
這篇文章主要給大家介紹了關(guān)于Spring Boot實(shí)現(xiàn)郵件服務(wù)的相關(guān)資料,文中還附上了常見(jiàn)郵箱的配置,通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-12-12spring security CSRF防護(hù)的示例代碼
這篇文章主要介紹了spring security CSRF防護(hù)的示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-03-03關(guān)于mybatis3中@SelectProvider的使用問(wèn)題
這篇文章主要介紹了mybatis3中@SelectProvider的使用技巧,@SelectProvide指定一個(gè)Class及其方法,并且通過(guò)調(diào)用Class上的這個(gè)方法來(lái)獲得sql語(yǔ)句,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2021-12-12jackson使用@JsonSerialize格式化BigDecimal解決.00不顯示問(wèn)題
這篇文章主要介紹了jackson使用@JsonSerialize格式化BigDecimal解決.00不顯示問(wèn)題,本文直接給出實(shí)現(xiàn)代碼,需要的朋友可以參考下2015-02-02Spring中的BeanFactory與FactoryBean區(qū)別詳解
這篇文章主要介紹了Spring中的BeanFactory與FactoryBean區(qū)別詳解,BeanFactory是一個(gè)接口,它是spring中的一個(gè)工廠,FactoryBean也是一個(gè)接口,實(shí)現(xiàn)了3個(gè)方法,通過(guò)重寫(xiě)其中方法自定義生成bean,需要的朋友可以參考下2024-01-01Java中println輸出漢字亂碼問(wèn)題一招解決方案
這篇文章主要介紹了Java中println輸出漢字亂碼問(wèn)題一招解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-12-12