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> <!-- ?。?!1、此處修改默認(rèn)替換符?。?!--> <resource.delimiter>${}</resource.delimiter> </properties> <dependencies> ... </dependencies> <profiles> <!-- ?。?!2、保留全部環(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> <!-- ?。?!5、開啟替換 ?。?!--> <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)文章
Java對象轉(zhuǎn)JSON時(shí)動(dòng)態(tài)的增刪改查屬性詳解
這篇文章主要介紹了Java對象轉(zhuǎn)JSON時(shí)如何動(dòng)態(tài)的增刪改查屬性的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11java設(shè)計(jì)模式之單例模式的詳解及優(yōu)點(diǎn)
這篇文章主要介紹了java設(shè)計(jì)模式之單例模式的詳解及優(yōu)點(diǎn)的相關(guān)資料,如果一個(gè)類始終只能創(chuàng)建一個(gè)實(shí)例,那么這個(gè)類被稱為單例類,這種設(shè)計(jì)模式被稱為單例模式,需要的朋友可以參考下2017-08-08Java?Lombok實(shí)現(xiàn)手機(jī)號碼校驗(yàn)的示例代碼
手機(jī)號碼校驗(yàn)通常是系統(tǒng)開發(fā)中最基礎(chǔ)的功能之一,本文主要介紹了Java?Lombok實(shí)現(xiàn)手機(jī)號碼校驗(yàn)的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07RabbitMQ,RocketMQ,Kafka?事務(wù)性,消息丟失,消息順序性和消息重復(fù)發(fā)送的處理策略問題
這篇文章主要介紹了RabbitMQ,RocketMQ,Kafka?事務(wù)性,消息丟失,消息順序性和消息重復(fù)發(fā)送的處理策略,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-03-03java實(shí)現(xiàn)斐波那契數(shù)列的3種方法
這篇文章主要介紹了java實(shí)現(xiàn)斐波那契數(shù)列的3種方法,有需要的朋友可以參考一下2014-01-01