使用Springboot 打jar包實現(xiàn)分離依賴lib和配置
打jar包實現(xiàn)分離依賴lib和配置
為了業(yè)務(wù)需要配置文件和jar分離,便于使用者修改配置信息,在網(wǎng)上找了很久,最終找到一個簡單有效的方法。
操作步驟
打開project工程的pom.xml文件,將下列配置粘貼到pom文件中:
<properties>
<java.version>1.8</java.version>
<!--在此配置打包輸出的路徑-->
<directory>d:/out/</directory>
</properties>
<build>
<plugins>
<!--上線部署 JAR啟動分離依賴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包不包含唯一版本標識-->
<useUniqueVersions>false</useUniqueVersions>
<!--程序啟動類application.java的路徑-->
<mainClass>com.sy.xx.Application</mainClass>
</manifest>
<!-- 指定配置文件目錄,這樣jar運行時會去找到同目錄下的config文件夾下查找 -->
<manifestEntries>
<Class-Path>config/</Class-Path>
</manifestEntries>
</archive>
<outputDirectory>${directory}</outputDirectory>
</configuration>
</plugin>
<!--拷貝依賴 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>
接下來使用maven package打包即可:

打包之后的樣子:

這樣就完成了配置文件以及l(fā)ib包和jar的分離了,并且jar在運行的時候會默認去讀取config文件夾中的配置,修改起來非常方便。
Springboot中jar包分離(分離lib包)
jar包分離介紹
springboot構(gòu)建jar部署,通過使用 java -jar xxx.jar 命令啟動服務(wù),非常方便。
但是通過maven構(gòu)建的jar包含 \BOOT-INF\lib\下的所有依賴jar包,導(dǎo)致jar包文件太大。
本文將lib文件夾下所依賴的jar包分離出來,解決文件過大問題。
jar包分離實施步驟
(1)按照正常的springboot項目打包方式,對項目進行打包package,其打包后目錄如下:
|--META-INF
|--BOOT-INF
|--classes
|--lib
|--org打完包后,進行解壓。找到\BOOT-INF\lib文件夾,將lib文件夾復(fù)制出來,后續(xù)使用。
其中\(zhòng)BOOT-INF\lib目錄下存放著所有的依賴jar包,ojdbc8-19.8.0.0.jar / lombok-1.18.16.jar / spring-boot-2.4.1.jar … 占用了大量的空間。jar包分離就是將其獨立開來。
(2)通過修改pom.xml中的一部分配置,再次打包,此時打包的內(nèi)容已經(jīng)排除了其依賴的各種jar包。
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<!--start-->
<configuration>
<!--這里對應(yī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:如果通過命令:在idea工具中打入:mvn clean dependency:copy-dependencies -DoutputDirectory=target/lib package
兩種方式打包都可以,最終的jar包已經(jīng)排除掉了lib文件。推薦第一種方便快捷。
(3)將第一次打包提取出來的lib文件夾和第二次打的jar包放在同一個目錄下,執(zhí)行以下命令,啟動項目:

java -jar -Dloader.path=./lib springboot-multi-datasources-0.0.1-SNAPSHOT.jar
小結(jié)一下
springboot項目什么都不用動,直接通過maven工具package打包,進行解壓。并把\BOOT-INF\lib目錄下的lib文件夾整個內(nèi)容復(fù)制出來。(取出lib文件夾的內(nèi)容)
在項目pom.xml中的plugin中加入以下內(nèi)容,注意層級關(guān)系以及要把入口類改成對應(yīng)的項目名。(start到end的內(nèi)容)
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<!--start-->
<configuration>
<!--這里對應(yī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包就沒有了依賴內(nèi)容,文件較小。把生成的jar包放在與首次打包生成的lib文件夾同目錄下。
執(zhí)行啟動腳本或者命令即可
java -jar -Dloader.path=./lib springboot-multi-datasources-0.0.1-SNAPSHOT.jar
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
關(guān)于controller的異常處理及service層的事務(wù)控制方式
這篇文章主要介紹了關(guān)于controller的異常處理及service層的事務(wù)控制方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-02-02
SpringBoot2 Jpa 批量刪除功能的實現(xiàn)
這篇文章主要介紹了SpringBoot2 Jpa 批量刪除功能的實現(xiàn),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-01-01
SpringBoot調(diào)用第三方WebService接口的操作技巧(.wsdl與.asmx類型)
這篇文章主要介紹了SpringBoot調(diào)第三方WebService接口的操作代碼(.wsdl與.asmx類型 ),本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-08-08
Java通過調(diào)用C/C++實現(xiàn)的DLL動態(tài)庫——JNI的方法
這篇文章主要介紹了Java通過調(diào)用C/C++實現(xiàn)的DLL動態(tài)庫——JNI的方法,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2018-01-01

