springboot打包JAR包瘦身lib和配置文件分離方式
springboot打包JAR包瘦身lib和配置文件分離
最近項目在部署使用的過程中,傳輸JAR包的時候發(fā)現(xiàn)JAR包有點大,傳輸速度有點慢。
筆者基于這個前提對項目的打包配置進行優(yōu)化進行探索,一般來說lib是很少修改,配置文件會根據(jù)需求會有所變動,如果講配置文件打進JAR生產(chǎn)環(huán)境會修改等不便等操作。
以下配置再pom.xml中 <build> <plugins>添加相關(guān)配置</plugins></build>
1.指定打包環(huán)境和跳過編譯單元測試
<!--定義項目的編譯環(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> <!--默認執(zhí)行src/test/java路徑下的測試用例,建議跳過執(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>
<!-- 不打包資源文件,如果放開全量JAR也不會打進去-->
<!-- <excludes>-->
<!-- <exclude>*.yml</exclude>-->
<!-- <exclude>*.properties</exclude>-->
<!-- </excludes>-->
<archive>
<manifest>
<addClasspath>true</addClasspath>
<!-- MANIFEST.MF 中 Class-Path 加入前綴 -->
<classpathPrefix>lib/</classpathPrefix>
<!-- jar包不包含唯一版本標識 -->
<useUniqueVersions>false</useUniqueVersions>
<!--指定啟動入口類 -->
<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.如果需要全量包也可以增加如下配置
便于開發(fā)環(huán)境打包使用
<!--全量JAR包,最初的打包方式,springboot的默認編譯插件,默認會把所有的文件打包成一個jar,-->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
<configuration>
<!--設置springboot的啟動類或者是JAR包的啟動類-->
<mainClass>com.xxxx.Application</mainClass>
<fork>true</fork>
<addResources>true</addResources>
<outputDirectory>${project.build.directory}/jar</outputDirectory>
</configuration>
</plugin>4.將lib和配置文件單獨復制出來
<!--復制關(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>
<!-- 復制配置文件到指定resources打包目錄 ,target目錄下的文件夾下,按需修改-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>3.2.0</version>
<executions>
<execution> <!-- 復制配置文件 -->
<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.全量配置如下,拷貝即用
注意啟動類的指定:
以下配置再pom.xml中 <build> 添加相關(guān)配置</build>
<!--拆分配置文件和LIB,給JAR瘦身-->
<!--啟動參考命令,再JAR目錄執(zhí)行,也可以指定絕對路徑:
${project.build.directory}工程路徑下的target目錄
Dloader.path:加載本地lib
Dspring.config.location:加載本地配置
server.port:指定端口
/-/- 這個有轉(zhuǎn)義,注命令要去掉/
java -Dloader.path=lib/ -jar xxxx.jar /-/-Dspring.config.location=resources/ /-/-server.port=8080
-->
<plugins>
<!--定義項目的編譯環(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>
<!--默認執(zhí)行src/test/java路徑下的測試用例,建議跳過執(zhí)行-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
<!--全量JAR包,最初的打包方式,springboot的默認編譯插件,默認會把所有的文件打包成一個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>
<!-- 不打包資源文件,如果放開全量JAR也不會打進去-->
<!-- <excludes>-->
<!-- <exclude>*.yml</exclude>-->
<!-- <exclude>*.properties</exclude>-->
<!-- </excludes>-->
<archive>
<manifest>
<addClasspath>true</addClasspath>
<!-- MANIFEST.MF 中 Class-Path 加入前綴 -->
<classpathPrefix>lib/</classpathPrefix>
<!-- jar包不包含唯一版本標識 -->
<useUniqueVersions>false</useUniqueVersions>
<!--指定springboot啟動入口類 -->
<mainClass>com.xxxx</mainClass>
</manifest>
<manifestEntries>
<!--MANIFEST.MF 中 Class-Path 加入資源文件目錄 -->
<Class-Path>./resources/</Class-Path>
</manifestEntries>
</archive>
<outputDirectory>${project.build.directory}</outputDirectory>
</configuration>
</plugin>
<!--復制關(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>
<!-- 復制配置文件到指定resources打包目錄 ,target目錄下的文件夾下,按需修改-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>3.2.0</version>
<executions>
<execution> <!-- 復制配置文件 -->
<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é)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Spring Boot實現(xiàn)郵件服務(附:常見郵箱的配置)
這篇文章主要給大家介紹了關(guān)于Spring Boot實現(xiàn)郵件服務的相關(guān)資料,文中還附上了常見郵箱的配置,通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2018-12-12
關(guān)于mybatis3中@SelectProvider的使用問題
這篇文章主要介紹了mybatis3中@SelectProvider的使用技巧,@SelectProvide指定一個Class及其方法,并且通過調(diào)用Class上的這個方法來獲得sql語句,本文通過實例代碼給大家介紹的非常詳細,需要的朋友可以參考下2021-12-12
jackson使用@JsonSerialize格式化BigDecimal解決.00不顯示問題
這篇文章主要介紹了jackson使用@JsonSerialize格式化BigDecimal解決.00不顯示問題,本文直接給出實現(xiàn)代碼,需要的朋友可以參考下2015-02-02
Spring中的BeanFactory與FactoryBean區(qū)別詳解
這篇文章主要介紹了Spring中的BeanFactory與FactoryBean區(qū)別詳解,BeanFactory是一個接口,它是spring中的一個工廠,FactoryBean也是一個接口,實現(xiàn)了3個方法,通過重寫其中方法自定義生成bean,需要的朋友可以參考下2024-01-01

