Maven中resources標(biāo)簽的用法詳解
在開發(fā)當(dāng)中,我們一般打包都是利用maven打包的,在項目當(dāng)中我們經(jīng)常會看見resources標(biāo)簽,可能很多人對這個標(biāo)簽并不是很理解,本篇文章主要詳細(xì)記錄resources標(biāo)簽的用法。
可能寫的比較多,但是都是我親自做實驗,邊做實驗邊記錄的??赐晗嘈拍憧隙芾斫獾?。
一、resources作用
1、打包編譯作用
在項目當(dāng)中進(jìn)行編譯的時候,他默認(rèn)是不會對某些文件進(jìn)行編譯的,例如在java文件夾下的mybatis當(dāng)中的.xml文件,還有在resources文件夾當(dāng)中有時候會存儲一些資源文件,默認(rèn)有些也是不進(jìn)行編譯的,這里的不進(jìn)行編譯指的是他不會編譯到target文件夾當(dāng)中,并且打包也是。
我們在正常開發(fā)項目的時候,有時候獲取資源是獲取的編譯后的路徑地址,他會在編譯后的路徑找不到文件(target文件夾),就是這個原因。
這時候就需要用到resources標(biāo)簽,在pom.xml添加,告訴maven我這些文件也需要編譯,并且打包的時候需要打包進(jìn)去。
2、配置文件取pom當(dāng)中的值
在現(xiàn)實開發(fā)當(dāng)中,我也遇到過,在pom文件當(dāng)中配置參數(shù),然后通過application.properties使用@@來進(jìn)行取pom的值。假如我不想用application.properties取值,而是用了新創(chuàng)建的比如a.properties取值,這時候就需要在pom當(dāng)中配置resources。
下面經(jīng)過示例直接演示。
二、演示resources打包編譯的作用
1、創(chuàng)建springboot項目
這里我創(chuàng)建了個空項目,然后resources當(dāng)中加了很多空文件,java當(dāng)中也是加了一個文件,pom.xml我是沒有動的,現(xiàn)在開始編譯打包測試。
看看哪些文件在編譯過后,會丟失。
2、進(jìn)行編譯打包
mvn clean install 一下:
這個是編譯后的,可以看出來在java文件夾當(dāng)中,我添加了a.fxml文件,但是編譯過后卻丟了。(注意:這里的fxml文件只是演示,總之不是java文件,也可能xml等文件
)
3、出現(xiàn)問題
這里我打的jar包,將包解壓之后發(fā)現(xiàn)和target當(dāng)中的classes一模一樣。同樣是缺少那個a.fxml文件。
4、得出結(jié)論
1、假如pom.xml不加resources,編譯出來的會丟失文件,這也就是很多情況下,我們在本地電腦運行沒有問題,但是一旦打包到服務(wù)器,會發(fā)現(xiàn)項目根本跑不起來,缺少各種文件,有時候就是這個原因。
2、target當(dāng)中的classes和打出來的包解壓后的classes是一模一樣的。
5、添加resources進(jìn)行解決
這里的配置代表的是,我要將src/main/java路徑下.fxml文件結(jié)尾的,編譯打包進(jìn)去。
當(dāng)有兩個同類型文件,只想打包進(jìn)去一個文件,可以在include標(biāo)簽當(dāng)中指定文件名稱。
<build> <resources> <resource> <directory>src/main/java</directory> <filtering>true</filtering> <includes> <include>**/*.fxml</include> </includes> </resource> </resources> </build>
添加這個配置之后,再進(jìn)行編譯打包,會發(fā)現(xiàn)以下問題:
view當(dāng)中的文件打包進(jìn)來了,但是resources文件下的文件夾和文件全丟了。
解決:
告訴maven,resources文件下的全部要進(jìn)行編譯。
<build> <resources> <resource> <directory>src/main/java</directory> <filtering>true</filtering> <includes> <include>**/*.fxml</include> </includes> </resource> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> </resource> </resources> </build>
從這里可以看出來,現(xiàn)在我項目當(dāng)中的文件都打包進(jìn)來了。
三、演示application取pom當(dāng)中值
1、創(chuàng)建springboot項目
pom配置文件我添加了一個port設(shè)置。
<properties> <java.version>1.8</java.version> <port>8081</port> </properties>
項目里面我添加了一個a.properties文件。a.properties和application.properties當(dāng)中我都設(shè)置了:
server.port=@port@
目的:就是讓配置文件的port去讀pom.xml當(dāng)中設(shè)置的port值。
2、進(jìn)行編譯打包
編譯打包后會發(fā)現(xiàn),a.properties沒有變化,而application.properties卻變成了maven當(dāng)中設(shè)置的值。
3、得出結(jié)論
我這里用的是springboot2.6.2,不管是哪個版本都可以點進(jìn)去,我們點進(jìn)去觀察。
從這里可以看出,springboot依賴當(dāng)中,其實已經(jīng)將application.properties給配置了。
也就是a.properties沒有進(jìn)行配置,所以取不到值,而application.properties配置了,所以取到值了。
4、添加resources進(jìn)行解決
目前問題是假如我想讓a.properties也一樣可以取到值。
通過添加以下配置即可:
<resources> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> </resource> </resources>
注意:
這里的filtering一定要設(shè)置為true
,假如為false,我們配置文件當(dāng)中用到了@@取pom的值,會取不到。
實際上,他是在編譯過后就把application當(dāng)中的值給替換了,替換成了pom當(dāng)中配置的值,而并非是程序當(dāng)中獲取的時候,他才動態(tài)去獲取pom當(dāng)中的值。
5、疑問
可能有的人會感覺好奇,為什么不這么配置,其實我也試了,只不過這么加的話,resources當(dāng)中的文件就丟了,只剩下a.properties了。
<resources> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> <includes> <include>a.properties</include> </includes> </resource> </resources>
總結(jié):一旦pom當(dāng)中添加resources,指定某一個文件,就會導(dǎo)致resources其他文件打包的時候丟失,這兩個例子其實都 體現(xiàn) 出來了。
到此這篇關(guān)于Maven中resources標(biāo)簽的用法詳解的文章就介紹到這了,更多相關(guān)Maven resources內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- IDEA?報Plugin'maven-resources-plugin:'not?found?的解決方案
- maven打包插件的使用(maven-compiler-plugin、maven-dependency-plugin、maven-jar-plugin、maven-resources-plugin)
- 解決問題:Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources
- Maven項目中resources配置總結(jié)
- Maven項目讀取resources文件路徑問題解決方案
- Maven項目中讀取src/main/resources目錄下的配置文件的方法
- Maven的pom.xml中resources標(biāo)簽的用法
相關(guān)文章
SpringBoot注解篇之@Resource與@Autowired的使用區(qū)別
@Resource 注解和 @Autowired 注解都是在 Spring Framework 中進(jìn)行依賴注入的注解,那么你知道他們有什么區(qū)別嗎,本文就來介紹一下2023-12-12Spring 4.0新功能:@Conditional注解詳細(xì)介紹
Spring Boot的強大之處在于使用了Spring 4框架的新特性:@Conditional注釋,此注釋使得只有在特定條件滿足時才啟用一些配置。下面這篇文章主要給大家介紹了關(guān)于Spring4.0中新功能:@Conditional注解的相關(guān)資料,需要的朋友可以參考下。2017-09-09Java8新特性之泛型的目標(biāo)類型推斷_動力節(jié)點Java學(xué)院整理
泛型是Java SE 1.5的新特性,泛型的本質(zhì)是參數(shù)化類型,也就是說所操作的數(shù)據(jù)類型被指定為一個參數(shù)。下面通過本文給分享Java8新特性之泛型的目標(biāo)類型推斷,感興趣的朋友參考下吧2017-06-06SpringBoot獲取當(dāng)前運行環(huán)境三種方式小結(jié)
在使用SpringBoot過程中,我們只需要引入相關(guān)依賴,然后在main方法中調(diào)用SpringBootApplication.run(應(yīng)用程序啟動類.class)方法即可,那么SpringBoot是如何獲取當(dāng)前運行環(huán)境呢,接下來由小編給大家介紹一下SpringBoot獲取當(dāng)前運行環(huán)境三種方式,需要的朋友可以參考下2024-01-01