Springboot 使用 maven-resources-plugin 打包變量替換jar沒有打包進去、Jar包沒有被使用的解決方法
問題場景:
最近在使用環(huán)境分離,必須用到maven-resources-plugin來替換配置文件變量。遇到了一些問題。
- 程序寫好了需要打包為packge.jar。
- 恰好本地使用了一些jar包(如:them.jar)作為依賴。
- jar包路徑就在項目根目錄的 lib 文件夾
問題1:本地依賴的jar包無法打包到程序包中
打完的包本地跑沒有任何問題,發(fā)布到線上就找不到jar包報錯:找不到 them.jar。為了找到問題測試了一下打包出 packge.jar 以后,將 lib 文件夾改為 lib1 運行 packge.jar 就報錯找不到 them.jar ,看起來是沒有打包進去。
問題1解決:
最終發(fā)現是沒有打包進去,修改配置打包進去:
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 導入到 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ā)現 packge.jar 解壓 them.jar 在其中,但是還是不生效。
說明還是引用的項目根目錄 /lib 里的 jar 包。
解決問題2:
配置問題,這里使用了 maven-resources-plugin ,就要使用其內部的 resource 不能使用 build.resource 標簽了。
<?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ā)現插件maven-resources-plugin只在maven打包的時候生效
發(fā)現插件maven-resources-plugin只在maven打包的時候生效,只有使用maven命令生效,具體表現為:我們使用 idea 的 run 命令執(zhí)行 maven-resources-plugin 下 resource 規(guī)則不生效資源沒有進去,這就導致了使用 Rebel 熱部署無法使用。
解決問題3:
使用 maven-resources-plugin只在maven打包的時候生,那就只能不用這個插件了。我的訴求就是只為了環(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、此處修改默認替換符?。?!-->
<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 導入到 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>
<!-- 打包結果輸出用 -->
<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>
<!-- !?。?、環(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 修改默認替換符。
2、project.build.plugins.maven-resources-plugin 依賴刪除。
3、project.build.plugins.maven-resources-plugin.resources 移動到project.build.plugins 下。
application.yml 改為:
spring:
profiles:
active: ${spring.profiles.active}這樣,project.profiles.profile.properties.spring.profiles.active 會替換成功,且熱部署也可用、外部依賴依舊可以靠 spring-boot-maven-plugin 插件導入 jar 包中使用。
到此這篇關于Springboot 使用 maven-resources-plugin 打包變量替換jar沒有打包進去、Jar包沒有被使用的解決方法的文章就介紹到這了,更多相關Springboot 使用 maven-resources-plugin 打包內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
- maven中springboot-maven-plugin的5種打包方式
- SpringBoot Maven打包插件spring-boot-maven-plugin無法解析原因
- SpringBoot中的maven插件spring-boot-maven-plugin使用
- springboot?maven?plugin報紅的解決辦法
- SpringBoot如何整合mybatis-generator-maven-plugin 1.4.0
- Springboot的spring-boot-maven-plugin導入失敗的解決方案
- 解決IDEA springboot"spring-boot-maven-plugin"報紅問題
- SpringBoot整合mybatis-generator-maven-plugin的方法
- Springboot maven plugin插件原理及作用
- SpringBoot Maven 項目 pom 中的 plugin 插件用法小結
相關文章
基于SpringBoot + 七牛云 + Quartz實現圖片存儲與定時清理
這篇文章主要介紹了在實際項目中使用七牛云對象存儲進行圖片存儲的方法,以及如何實現套餐管理(包括圖片上傳和多對多關聯(lián)檢查組)的前端和后端功能,此外,還詳細講解了如何使用Quartz定時任務組件自動清理垃圾圖片,以節(jié)省存儲資源,需要的朋友可以參考下2026-04-04
詳解java如何實現帶RequestBody傳Json參數的GET請求
在調試Fate平臺時,遇到了一個奇葩的接口類型,該接口為Get方式,入參是一個json類型在body中傳遞,使用body中傳參的話為什么不用POST請求而使用了GET請求,下面我們就來深入研究一下2024-02-02
Java設置Excel行列自適應詳細操作步驟和代碼示例(告別手動調整的繁瑣)
在excel中,可通過設置自適應行高或列寬自動排版,是一種比較常用的快速調整表格整體布局的方法,這篇文章主要介紹了Java設置Excel行列自適應詳細操作步驟和代碼示例的相關資料,需要的朋友可以參考下2026-01-01
java并發(fā)編程專題(九)----(JUC)淺析CyclicBarrier
這篇文章主要介紹了java CyclicBarrier的相關資料,文中示例代碼非常詳細,幫助大家更好的理解和學習,感興趣的朋友可以了解下2020-07-07

