Springboot 使用 maven-resources-plugin 打包變量替換jar沒有打包進(jìn)去、Jar包沒有被使用的解決方法
問題場景:
最近在使用環(huán)境分離,必須用到maven-resources-plugin來替換配置文件變量。遇到了一些問題。
- 程序?qū)懞昧诵枰虬鼮閜ackge.jar。
- 恰好本地使用了一些jar包(如:them.jar)作為依賴。
- jar包路徑就在項(xiàng)目根目錄的 lib 文件夾
問題1:本地依賴的jar包無法打包到程序包中
打完的包本地跑沒有任何問題,發(fā)布到線上就找不到j(luò)ar包報(bào)錯(cuò):找不到 them.jar。為了找到問題測試了一下打包出 packge.jar 以后,將 lib 文件夾改為 lib1 運(yùn)行 packge.jar 就報(bào)錯(cuò)找不到 them.jar ,看起來是沒有打包進(jìn)去。
問題1解決:
最終發(fā)現(xiàn)是沒有打包進(jìn)去,修改配置打包進(jìn)去:
1、增加 project.repositories.dependency.scope 值為 system。
2、增加 project.build.plugins.plugin.configuration.includeSystemScope 值為 true。
<?xml version="1.0" encoding="UTF-8"?>
<project>
<repositories>
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
<version>2.0.31</version>
<!-- ?。。∽⒁膺@里,加上即可?。?! -->
<scope>system</scope>
<!-- ?。?!注意這里,加上即可?。?! -->
<systemPath>${project.basedir}/lib/them.jar</systemPath>
</dependency>
</dependencies>
<build>
<finalName>${project.artifactId}-${project.version}-${spring.profiles.active}</finalName>
<plugins>
<!-- 外部 lib 導(dǎo)入到 jar 包中 -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>1.4.2.RELEASE</version>
<configuration>
<fork>true</fork>
<!-- ?。?!注意這里,加上即可?。?! -->
<includeSystemScope>true</includeSystemScope>
<!-- ?。?!注意這里,加上即可?。?! -->
<mainClass>com.test.TestApplication</mainClass>
</configuration>
</plugin>
</plugins>
</build>
</project>問題2:發(fā)現(xiàn) packge.jar 解壓 them.jar 在其中,但是還是不生效。
說明還是引用的項(xiàng)目根目錄 /lib 里的 jar 包。
解決問題2:
配置問題,這里使用了 maven-resources-plugin ,就要使用其內(nèi)部的 resource 不能使用 build.resource 標(biāo)簽了。
<?xml version="1.0" encoding="UTF-8"?>
<project>
<repositories>
...
</dependencies>
<build>
<finalName>${project.artifactId}-${project.version}-${spring.profiles.active}</finalName>
<!-- 替換變量用 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<executions>
<execution>
<id>default-resources</id>
<phase>package</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>target/classes</outputDirectory>
<useDefaultDelimiters>false</useDefaultDelimiters>
<delimiters>
<delimiter>@</delimiter>
</delimiters>
<!-- !?。?使用這里面的 resources ?。?! -->
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
<resource>
<directory>src/main/webapp</directory>
<targetPath>META-INF/resources</targetPath>
<includes>
<include>**/**</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
</resource>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
<!-- !?。?使用這里面的 resources !?。?-->
</configuration>
</execution>
</executions>
</plugin>
<!-- !??! 外部 resources 棄用!??! -->
<!-- <resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>-->
<!-- ?。?! 外部 resources 棄用?。?! -->
</build>
</project>問題3:發(fā)現(xiàn)插件maven-resources-plugin只在maven打包的時(shí)候生效
發(fā)現(xiàn)插件maven-resources-plugin只在maven打包的時(shí)候生效,只有使用maven命令生效,具體表現(xiàn)為:我們使用 idea 的 run 命令執(zhí)行 maven-resources-plugin 下 resource 規(guī)則不生效資源沒有進(jìn)去,這就導(dǎo)致了使用 Rebel 熱部署無法使用。
解決問題3:
使用 maven-resources-plugin只在maven打包的時(shí)候生,那就只能不用這個(gè)插件了。我的訴求就是只為了環(huán)境分離。
pom.xml改為:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
...
<properties>
<java.version>8</java.version>
<!-- ?。。?、此處修改默認(rèn)替換符!?。?->
<resource.delimiter>${}</resource.delimiter>
</properties>
<dependencies>
...
</dependencies>
<profiles>
<!-- ?。。?、保留全部環(huán)境配置 ?。。?->
<profile>
<id>dev</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<spring.profiles.active>dev</spring.profiles.active>
</properties>
</profile>
... other profile
</profile>
</profiles>
<build>
<finalName>${project.artifactId}-${project.version}-${spring.profiles.active}</finalName>
<plugins>
<!-- 外部 lib 導(dǎo)入到 jar 包中 -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>1.4.2.RELEASE</version>
<configuration>
<fork>true</fork>
<includeSystemScope>true</includeSystemScope>
<mainClass>com.wpj.simple.SimpleApplication</mainClass>
</configuration>
</plugin>
<!-- 打包結(jié)果輸出用 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<id>print-custom-info</id>
<phase>package</phase>
<configuration>
<tasks>
<echo message="${spring.profiles.active} 環(huán)境打包執(zhí)行成功"/>
</tasks>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
<resource>
<directory>src/main/webapp</directory>
<targetPath>META-INF/resources</targetPath>
<includes>
<include>**/**</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/**</include>
</includes>
<excludes>
<exclude>jrebel.xml</exclude>
</excludes>
</resource>
<!-- ?。?!4、環(huán)境替換再切換為 build.resources.resource !?。?->
<resource>
<directory>src/main/resources</directory>
<!-- ?。。?、開啟替換 !!!-->
<filtering>true</filtering>
<includes>
<include>application.yml</include>
</includes>
</resource>
</resources>
</build>
</project>1、project.properties.resource.delimiter 修改默認(rèn)替換符。
2、project.build.plugins.maven-resources-plugin 依賴刪除。
3、project.build.plugins.maven-resources-plugin.resources 移動(dòng)到project.build.plugins 下。
application.yml 改為:
spring:
profiles:
active: ${spring.profiles.active}這樣,project.profiles.profile.properties.spring.profiles.active 會(huì)替換成功,且熱部署也可用、外部依賴依舊可以靠 spring-boot-maven-plugin 插件導(dǎo)入 jar 包中使用。
到此這篇關(guān)于Springboot 使用 maven-resources-plugin 打包變量替換jar沒有打包進(jìn)去、Jar包沒有被使用的解決方法的文章就介紹到這了,更多相關(guān)Springboot 使用 maven-resources-plugin 打包內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- maven中springboot-maven-plugin的5種打包方式
- SpringBoot Maven打包插件spring-boot-maven-plugin無法解析原因
- SpringBoot中的maven插件spring-boot-maven-plugin使用
- springboot?maven?plugin報(bào)紅的解決辦法
- SpringBoot如何整合mybatis-generator-maven-plugin 1.4.0
- Springboot的spring-boot-maven-plugin導(dǎo)入失敗的解決方案
- 解決IDEA springboot"spring-boot-maven-plugin"報(bào)紅問題
- SpringBoot整合mybatis-generator-maven-plugin的方法
- Springboot maven plugin插件原理及作用
- SpringBoot Maven 項(xiàng)目 pom 中的 plugin 插件用法小結(jié)
相關(guān)文章
SpringBoot+kaptcha實(shí)現(xiàn)驗(yàn)證碼花式玩法詳解
這篇文章主要想和大家聊聊kaptcha的用法,畢竟這個(gè)已經(jīng)有16年歷史的玩意還在有人用,說明它的功能還是相當(dāng)強(qiáng)大的,感興趣的小伙伴可以了解一下2022-05-05
SpringBoot項(xiàng)目啟動(dòng)內(nèi)存占用過高問題及解決
SpringBoot應(yīng)用啟動(dòng)占用1G內(nèi)存,訪問量低導(dǎo)致資源浪費(fèi),通過調(diào)整JVM參數(shù)(如MetaspaceSize、Xms/Xmx、Xmn、Xss)及使用CMS收集器,可優(yōu)化內(nèi)存使用,減少資源浪費(fèi)2025-09-09
使用Java實(shí)現(xiàn)類似Comet風(fēng)格的web app
這篇文章主要介紹了使用Java實(shí)現(xiàn)類似Comet風(fēng)格的web app的方法,包括客戶端的響應(yīng)和XML解析等功能,需要的朋友可以參考下2015-11-11
基于SpringBoot + 七牛云 + Quartz實(shí)現(xiàn)圖片存儲(chǔ)與定時(shí)清理
這篇文章主要介紹了在實(shí)際項(xiàng)目中使用七牛云對象存儲(chǔ)進(jìn)行圖片存儲(chǔ)的方法,以及如何實(shí)現(xiàn)套餐管理(包括圖片上傳和多對多關(guān)聯(lián)檢查組)的前端和后端功能,此外,還詳細(xì)講解了如何使用Quartz定時(shí)任務(wù)組件自動(dòng)清理垃圾圖片,以節(jié)省存儲(chǔ)資源,需要的朋友可以參考下2026-04-04
詳解java如何實(shí)現(xiàn)帶RequestBody傳Json參數(shù)的GET請求
在調(diào)試Fate平臺(tái)時(shí),遇到了一個(gè)奇葩的接口類型,該接口為Get方式,入?yún)⑹且粋€(gè)json類型在body中傳遞,使用body中傳參的話為什么不用POST請求而使用了GET請求,下面我們就來深入研究一下2024-02-02
Java設(shè)置Excel行列自適應(yīng)詳細(xì)操作步驟和代碼示例(告別手動(dòng)調(diào)整的繁瑣)
在excel中,可通過設(shè)置自適應(yīng)行高或列寬自動(dòng)排版,是一種比較常用的快速調(diào)整表格整體布局的方法,這篇文章主要介紹了Java設(shè)置Excel行列自適應(yīng)詳細(xì)操作步驟和代碼示例的相關(guān)資料,需要的朋友可以參考下2026-01-01
java并發(fā)編程專題(九)----(JUC)淺析CyclicBarrier
這篇文章主要介紹了java CyclicBarrier的相關(guān)資料,文中示例代碼非常詳細(xì),幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下2020-07-07

