使用Springboot 打jar包實(shí)現(xiàn)分離依賴(lài)lib和配置
打jar包實(shí)現(xiàn)分離依賴(lài)lib和配置
為了業(yè)務(wù)需要配置文件和jar分離,便于使用者修改配置信息,在網(wǎng)上找了很久,最終找到一個(gè)簡(jiǎn)單有效的方法。
操作步驟
打開(kāi)project工程的pom.xml文件,將下列配置粘貼到pom文件中:
<properties> <java.version>1.8</java.version> <!--在此配置打包輸出的路徑--> <directory>d:/out/</directory> </properties> <build> <plugins> <!--上線(xiàn)部署 JAR啟動(dòng)分離依賴(lài)lib和配置--> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId> <version>3.1.0</version> </plugin> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <configuration> <!--不打包資源文件--> <excludes> <exclude>*.**</exclude> </excludes> <archive> <manifest> <addClasspath>true</addClasspath> <classpathPrefix>lib/</classpathPrefix> <!--jar包不包含唯一版本標(biāo)識(shí)--> <useUniqueVersions>false</useUniqueVersions> <!--程序啟動(dòng)類(lèi)application.java的路徑--> <mainClass>com.sy.xx.Application</mainClass> </manifest> <!-- 指定配置文件目錄,這樣jar運(yùn)行時(shí)會(huì)去找到同目錄下的config文件夾下查找 --> <manifestEntries> <Class-Path>config/</Class-Path> </manifestEntries> </archive> <outputDirectory>${directory}</outputDirectory> </configuration> </plugin> <!--拷貝依賴(lài) copy-dependencies--> <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> ${directory}/lib/ </outputDirectory> </configuration> </execution> </executions> </plugin> <!--拷貝資源文件 copy-resources--> <plugin> <artifactId>maven-resources-plugin</artifactId> <executions> <execution> <id>copy-resources</id> <phase>package</phase> <goals> <goal>copy-resources</goal> </goals> <configuration> <resources> <resource> <directory>src/main/resources</directory> <!-- 指定參與構(gòu)建的resoures--> <includes> <include>*.**</include> </includes> </resource> </resources> <outputDirectory>${directory}/config</outputDirectory> </configuration> </execution> </executions> </plugin> </plugins> </build>
接下來(lái)使用maven package打包即可:
打包之后的樣子:
這樣就完成了配置文件以及l(fā)ib包和jar的分離了,并且jar在運(yùn)行的時(shí)候會(huì)默認(rèn)去讀取config文件夾中的配置,修改起來(lái)非常方便。
Springboot中jar包分離(分離lib包)
jar包分離介紹
springboot構(gòu)建jar部署,通過(guò)使用 java -jar xxx.jar 命令啟動(dòng)服務(wù),非常方便。
但是通過(guò)maven構(gòu)建的jar包含 \BOOT-INF\lib\下的所有依賴(lài)jar包,導(dǎo)致jar包文件太大。
本文將lib文件夾下所依賴(lài)的jar包分離出來(lái),解決文件過(guò)大問(wèn)題。
jar包分離實(shí)施步驟
(1)按照正常的springboot項(xiàng)目打包方式,對(duì)項(xiàng)目進(jìn)行打包package,其打包后目錄如下:
|--META-INF |--BOOT-INF |--classes |--lib |--org
打完包后,進(jìn)行解壓。找到\BOOT-INF\lib文件夾,將lib文件夾復(fù)制出來(lái),后續(xù)使用。
其中\(zhòng)BOOT-INF\lib目錄下存放著所有的依賴(lài)jar包,ojdbc8-19.8.0.0.jar / lombok-1.18.16.jar / spring-boot-2.4.1.jar … 占用了大量的空間。jar包分離就是將其獨(dú)立開(kāi)來(lái)。
(2)通過(guò)修改pom.xml中的一部分配置,再次打包,此時(shí)打包的內(nèi)容已經(jīng)排除了其依賴(lài)的各種jar包。
<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <!--start--> <configuration> <!--這里對(duì)應(yīng)項(xiàng)目的主入口--> <mainClass>com.ityj.multidb.SpringbootMultiDatasourcesApplication</mainClass> <layout>ZIP</layout> <includes> <include> <groupId>nothing</groupId> <artifactId>nothing</artifactId> </include> </includes> </configuration> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> <!--end--> </plugin>
1:直接重新打包,即可
2:如果通過(guò)命令:在idea工具中打入:mvn clean dependency:copy-dependencies -DoutputDirectory=target/lib package
兩種方式打包都可以,最終的jar包已經(jīng)排除掉了lib文件。推薦第一種方便快捷。
(3)將第一次打包提取出來(lái)的lib文件夾和第二次打的jar包放在同一個(gè)目錄下,執(zhí)行以下命令,啟動(dòng)項(xiàng)目:
java -jar -Dloader.path=./lib springboot-multi-datasources-0.0.1-SNAPSHOT.jar
小結(jié)一下
springboot項(xiàng)目什么都不用動(dòng),直接通過(guò)maven工具package打包,進(jìn)行解壓。并把\BOOT-INF\lib目錄下的lib文件夾整個(gè)內(nèi)容復(fù)制出來(lái)。(取出lib文件夾的內(nèi)容)
在項(xiàng)目pom.xml中的plugin中加入以下內(nèi)容,注意層級(jí)關(guān)系以及要把入口類(lèi)改成對(duì)應(yīng)的項(xiàng)目名。(start到end的內(nèi)容)
<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <!--start--> <configuration> <!--這里對(duì)應(yīng)項(xiàng)目的主入口--> <mainClass>com.ityj.multidb.SpringbootMultiDatasourcesApplication</mainClass> <layout>ZIP</layout> <includes> <include> <groupId>nothing</groupId> <artifactId>nothing</artifactId> </include> </includes> </configuration> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> <!--end--> </plugin>
修改后再次package打包,這次的jar包就沒(méi)有了依賴(lài)內(nèi)容,文件較小。把生成的jar包放在與首次打包生成的lib文件夾同目錄下。
執(zhí)行啟動(dòng)腳本或者命令即可
java -jar -Dloader.path=./lib springboot-multi-datasources-0.0.1-SNAPSHOT.jar
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java實(shí)現(xiàn)的AES256加密解密功能示例
這篇文章主要介紹了Java實(shí)現(xiàn)的AES256加密解密功能,結(jié)合完整實(shí)例形式分析了Java實(shí)現(xiàn)AES256加密解密功能的步驟與相關(guān)操作技巧,需要的朋友可以參考下2017-02-02Java線(xiàn)程安全狀態(tài)專(zhuān)題解析
線(xiàn)程安全是多線(xiàn)程編程時(shí)的計(jì)算機(jī)程序代碼中的一個(gè)概念。在擁有共享數(shù)據(jù)的多條線(xiàn)程并行執(zhí)行的程序中,線(xiàn)程安全的代碼會(huì)通過(guò)同步機(jī)制保證各個(gè)線(xiàn)程都可以正常且正確的執(zhí)行,不會(huì)出現(xiàn)數(shù)據(jù)污染等意外情況2022-03-03mybatis實(shí)現(xiàn)增刪改查_(kāi)動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
本文通過(guò)實(shí)例代碼給大家介紹了mybatis實(shí)現(xiàn)增刪改查功能,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下吧2017-09-09Java在Excel中添加水印的實(shí)現(xiàn)(單一水印、平鋪水印)
這篇文章主要介紹了Java在Excel中添加水印的實(shí)現(xiàn)(單一水印、平鋪水印),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04在Java的Struts框架下進(jìn)行web編程的入門(mén)教程
這篇文章主要介紹了在Java的Struts框架下進(jìn)行web編程的入門(mén)教程,需要的朋友可以參考下2015-11-11java序列化對(duì)象根據(jù)不同配置動(dòng)態(tài)改變屬性名的方法
本文主要介紹了java序列化對(duì)象根據(jù)不同配置動(dòng)態(tài)改變屬性名的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-05-05