Springboot 使用 maven-resources-plugin 打包變量替換jar沒有打包進(jìn)去、Jar包沒有被使用的解決方法
問題場(chǎng)景:
最近在使用環(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。為了找到問題測(cè)試了一下打包出 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>
<!-- !??!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)容請(qǐng)搜索腳本之家以前的文章或繼續(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對(duì)象轉(zhuǎn)JSON時(shí)動(dòng)態(tài)的增刪改查屬性詳解
這篇文章主要介紹了Java對(duì)象轉(zhuǎn)JSON時(shí)如何動(dòng)態(tài)的增刪改查屬性的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11
java設(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-08
Java?Lombok實(shí)現(xiàn)手機(jī)號(hào)碼校驗(yàn)的示例代碼
手機(jī)號(hào)碼校驗(yàn)通常是系統(tǒng)開發(fā)中最基礎(chǔ)的功能之一,本文主要介紹了Java?Lombok實(shí)現(xiàn)手機(jī)號(hào)碼校驗(yàn)的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07
RabbitMQ,RocketMQ,Kafka?事務(wù)性,消息丟失,消息順序性和消息重復(fù)發(fā)送的處理策略問題
這篇文章主要介紹了RabbitMQ,RocketMQ,Kafka?事務(wù)性,消息丟失,消息順序性和消息重復(fù)發(fā)送的處理策略,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-03-03
java實(shí)現(xiàn)斐波那契數(shù)列的3種方法
這篇文章主要介紹了java實(shí)現(xiàn)斐波那契數(shù)列的3種方法,有需要的朋友可以參考一下2014-01-01

