maven中resource配置使用詳解
maven中resource標(biāo)簽詳解
1. 使用場(chǎng)景
通常情況下, maven項(xiàng)目中默認(rèn)資源文件為src/main/resources和src/test/resources目錄
但項(xiàng)目中可能會(huì)有以下場(chǎng)景:
- 需要添加
src/main/resources之外的目錄中的配置文件 - 只需要
src/main/resources中部分配置文件 - 需要對(duì)
src/main/resources中配置文件的變量, 進(jìn)行placeholder進(jìn)行解析值替換
這時(shí)候, 就需要在pom中配置build.resouces.resouce進(jìn)行個(gè)性化配置
2. 使用語法
2.1 resource配置結(jié)構(gòu)
在pom中配置中可以配置的元素結(jié)構(gòu)如下:
<build>
<resources>
<resource>
<directory></directory>
<filtering></filtering>
<includes>
<include></include>
</includes>
<excludes>
<exclude></exclude>
</excludes>
</resource>
<resource>
...
</resource>
</resources>
</build>- 標(biāo)簽
<directory>指定資源文件目錄 - 標(biāo)簽
<includes>指定資源文件目錄中,僅包含哪些文件被打包 - 標(biāo)簽
<excludes>指定資源文件目錄中,僅哪些文件不被打包 - 標(biāo)簽
<filtering>是一個(gè)bool值,默認(rèn)值為false。指定打包時(shí)的配置文件中是否進(jìn)行變量替換
2.2 配置語法及特殊場(chǎng)景
(示例項(xiàng)目的結(jié)構(gòu)參考文件最后)
2.2.1 filtering的使用
1.資源文件中使用${keyword}占位符來定義變量, 如src/main/resouces/application.properties:
application.user=${username}
application.password=${password}2.這時(shí)候可以在pom.xml文件中定義變量的取值
<properties> <username>mysql</username> <password>password123</password> </properties>
3.如果需要對(duì)配置文件中變量進(jìn)行替換實(shí)際值,就需要開啟<filtering>,該值設(shè)置為true。
<resource>
<directory>src/main/resources</directory>
<includes>
<include>application.properties</include>
</includes>
<filtering>true</filtering>
</resource>打包后, 資源文件src/main/resouces/application.properties:
application.user=mysql application.password=mysql
另, 變量的定義可以不放在pom里, 也可以指定其他文件, 通過build.filters.filter配置即可. 示例:
<build>
<finalName>test-maven-resource</finalName>
<filters>
<filter>src/main/config/${active.profile}/zookeeper.properties</filter>
<filter>src/main/config/${active.profile}/xdcs.properties</filter>
<filter>src/main/config/${active.profile}/maven-test.properties</filter>
<filter>src/main/config/${active.profile}/web.properties</filter>
</filters>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/config/${active.profile}</directory>
<filtering>false</filtering>
</resource>
</resources>2.2.2 resource之間的關(guān)系
怎么理解pom中多個(gè)resource的關(guān)系? 并集? 交集? 還是其他?
先說結(jié)論: 多個(gè)resource可以理解為按順序?qū)Χ鄠€(gè)resource進(jìn)行收集資源
測(cè)試示例如下: 第一個(gè)resource排除application.properties, 第二個(gè)resource包含application.properties:
<resources>
<!-- 多個(gè)resource的關(guān)系: 可以理解為依次對(duì)多個(gè)resource進(jìn)行收集資源 -->
<resource>
<directory>src/main/resources</directory>
<excludes>
<exclude>application.properties</exclude>
</excludes>
<filtering>false</filtering>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>application.properties</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>打包后, 得到如下結(jié)構(gòu):
target/test-resource
├── META-INF
└── WEB-INF
└── classes
├── application.properties
├── application.xml
├── application.yaml
└── application.yml2.2.3 includes和excludes的關(guān)系
一般情況下一個(gè)resource中單獨(dú)使用其中一個(gè)即可滿足要求:
- 標(biāo)簽
<includes>指定資源文件目錄中,僅包含哪些文件被打包 - 標(biāo)簽
<excludes>指定資源文件目錄中,僅哪些文件不被打包
注意, 上述描述中僅的定義. 當(dāng)同時(shí)存在includes和excludes是以哪個(gè)為主?
先說結(jié)論: 取兩者描述資源的交集
測(cè)試示例:
<resource>
<directory>src/main/resources</directory>
<excludes>
<exclude>application.properties</exclude>
</excludes>
<includes>
<include>application.yaml</include>
<include>application.xml</include>
</includes>
<filtering>false</filtering>
</resource>打包后得到結(jié)果:
target/test-resource
├── META-INF
└── WEB-INF
└── classes
├── application.xml
└── application.yaml
2.2.4 打包默認(rèn)其他目錄
打包src/main/resources默認(rèn)目錄之外的目錄, 指定<directory>為對(duì)應(yīng)目錄即可
<!-- 場(chǎng)景1:增加默認(rèn)resource之外的目錄 -->
<resource>
<directory>src/main/config</directory>
<includes>
<!-- **表示任意目錄,*.*表示任意文件名和擴(kuò)展名-->
<include>**/*.*</include>
</includes>
<!-- 表示是否對(duì)配置文件中的${}占位符進(jìn)行解析替換-->
<filtering>false</filtering>
</resource>打包得到結(jié)構(gòu):
target/test-resource
├── META-INF
└── WEB-INF
└── classes
└── redis.properties從上述結(jié)果中, 可以得出一個(gè)非常重要的結(jié)論:
如果pom中顯式定義了resource, 則要想默認(rèn)的src/main/resources目錄生效, 必須也顯式額外配置
2.2.5 include和exclude支持通配符
** 表示任意目錄, *.*表示任意文件名和擴(kuò)展名
<include>**/*.xml</include> <include>**/*.*</include>
2.2.6 自定義filter占位符
默認(rèn)的占位符為${}, 但是為了與其他場(chǎng)景區(qū)分(如spring), 可能需要自定義占位符.
只需要顯式定義<resource.delimiter>的properties即可.
<properties>
<username>mysql</username>
<password>admin</password>
<resource.delimiter>@@</resource.delimiter>
</properties>
<build>
<finalName>test-resource</finalName>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>application.properties</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
</build>application.properties文件內(nèi)容:
application.user=@username@ application.password=@password@
還可以在maven-resources-plugin插件的configuration中配置:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.5</version>
<configuration>
<useDefaultDelimiters>false</useDefaultDelimiters>
<delimiters>
<!-- 在這里配置配一半即可,即默認(rèn)開始符和結(jié)束符一樣 -->
<delimiter>@</delimiter>
</delimiters>
<encoding>UTF-8</encoding>
</configuration>
</plugin>3. 示例項(xiàng)目的結(jié)構(gòu)
src
└── main
├── config
│ └── redis.properties
├── java
└── resources
├── application.properties
├── application.xml
├── application.yaml
└── application.yml到此這篇關(guān)于maven中resource配置詳解的文章就介紹到這了,更多相關(guān)maven resource配置內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
淺談Java異常的Exception e中的egetMessage()和toString()方法的區(qū)別
下面小編就為大家?guī)硪黄獪\談Java異常的Exception e中的egetMessage()和toString()方法的區(qū)別。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-07-07
利用MultipartFile實(shí)現(xiàn)文件上傳功能
這篇文章主要為大家詳細(xì)介紹了利用MultipartFile實(shí)現(xiàn)文件上傳功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-11-11
Java中LambdaQueryWrapper的常用方法詳解
這篇文章主要給大家介紹了關(guān)于Java中LambdaQueryWrapper常用方法的相關(guān)資料,lambdaquerywrapper是一個(gè)Java庫,用于構(gòu)建類型安全的Lambda表達(dá)式查詢,需要的朋友可以參考下2023-11-11
詳解Mybatis-plus中更新date類型數(shù)據(jù)遇到的坑
這篇文章主要介紹了詳解Mybatis-plus中更新date類型數(shù)據(jù)遇到的坑,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10
JavaCV實(shí)現(xiàn)圖片中人臉檢測(cè)的示例代碼
這篇文章主要介紹了如何利用JavaCV實(shí)現(xiàn)圖片中人臉檢測(cè)的功能,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,感興趣的可以了解一下2022-11-11

