最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Maven項目中resources配置總結(jié)

 更新時間:2021年03月31日 08:52:24   作者:翔子書記  
這篇文章主要介紹了Maven項目中resources配置總結(jié),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

背景

通常Maven項目的文件目錄結(jié)構(gòu)如下:

# Maven項目的標(biāo)準(zhǔn)目錄結(jié)構(gòu)
src
 main
 java   #源文件 
 resources #資源文件
 filters #資源過濾文件
 config #配置文件
 scripts #腳本文件
 webapp #web應(yīng)用文件
 test
 java #測試源文件
 resources #測試資源文件
 filters #測試資源過濾文件
 it  #集成測試
 assembly #assembly descriptors
 site #Site
target
 generated-sources
 classes
 generated-test-sources
 test-classes
 xxx.jar
pom.xml
LICENSE.txt
NOTICE.txt
README.txt

其中src/main/resourcessrc/test/resources是資源文件目錄。本文將詳細(xì)介紹資源文件相關(guān)的配置。

第一部分 基本配置介紹

我們在使用Maven組件來構(gòu)建項目的時候,通常將配置文件放在資源文件目錄下。針對這個目錄,在pom.xml文件進(jìn)行了定義,我們首先看一個案例:

<build>
<resources>
 <resource>
 <directory>src/main/resources</directory>
 <filtering>true</filtering>
 <includes>
  <include>application.properties</include>
 </includes>
 </resource>
 <resource>
  <directory>src/main/resources</directory>
  <filtering>false</filtering>
  <excludes>
   <exclude>application.properties</exclude>
  </excludes>
 </resource>
</resources>
</build>
  • 標(biāo)簽<directory>指定資源文件目錄;
  • 標(biāo)簽 <include>指定資源文件目錄中,哪些文件被打包。
  • 標(biāo)簽<excludes>指定資源文件目錄中,哪些文件不被打包。

特別的,標(biāo)簽<filtering>是一個bool值,默認(rèn)值為false。在maven資源文件中,支持使用變量placeholder,例如資源文件:

# application.properties
application.user=${username}
application.password=${password}

文件中使用${keyword}占位符來標(biāo)識變量。這時候可以在pom.xml文件中定義變量的取值:

<properties>
 <username>mysql</username>
 <password>password123</password>
</properties>

如果需要對配置文件中變量進(jìn)行替換實際值,就需要開啟<filtering>,該值設(shè)置為true。

第二部分 具體配置和注意事項

2.1 案例說明

根據(jù)上面的介紹,最開始例子中有兩段resource的配置描述,分別的含義為:

  • 第一個配置的含義是:在配置文件目錄src/main/resources過濾掉其他文件,只保留application.properties文件。并且開啟filtering變量替換屬性。
  • 第二個配置的含義是:在配置文件目錄src/main/resources過濾掉application.properties文件,其他文件均保留。并且關(guān)閉filtering變量替換屬性。

需要特別注意的是,這里兩個<resources>都是對資源目錄<src/main/resources>的配置定義,一個是保留application.properties,一個是去除application.properties。這樣兩個配置會不會沖突?實際上兩個配置是兼容。最后是取兩個配置分別過濾的文件集合的并集。

可以看一下例子,資源目錄src/main/resources里面有三個文件:

application.yml
application.properties
application.xml

編譯后,target/classes路徑中三個配置文件都是有的。第一配置文件過濾后文件集合為{application.properties},第二個配置過濾后的集合為{application.yml,application.xml},最后取并集就得到了最后編譯結(jié)果。

2.2 正則過濾

在對資源目錄中文件進(jìn)行過濾時,還支持正則表達(dá)式。例如:

<include>**/*.xml</include>

這個表達(dá)式表示包含了資源目錄下面所有xml文件(以及子目錄下面)。

2.3 變量占位符

這里主要指的是<filtering>的功能。例如下面的xml文件定義了一個研發(fā)<profile>

<profiles>
  <profile>
   <id>dev</id>
   <properties>
    <resource.delimiter>${}</resource.delimiter>
    <username>mysql</username>
    <password>password123</password>
   </properties>
   <activation>
    <activeByDefault>true</activeByDefault>
   </activation>
  </profile>
 </profiles>

配置中定義的usernamepassword兩個變量的值。使用package -P dev編譯后,配置文件中占位符變量被替換:

application.user=mysql
application.password=password123

需要注意的是這里增加了<resource.delimiter>標(biāo)簽配置,定義了占位符的格式。有些時候其他依賴包的pom文件也會指定占位符的格式,就會造成格式不統(tǒng)一。例如:spring boot把默認(rèn)的占位符號${}改成了@var@。所以建議進(jìn)行配置,否則容易環(huán)境"污染"。

2.4 關(guān)于一個錯誤觀點的說明

有很多關(guān)于這個主題的文章(例如CSND)中,認(rèn)為同一個<resource>中,若是<include><exclude>都存在的話,那就發(fā)生沖突了,這時會以<exclude>為準(zhǔn)。

關(guān)于這個論點,筆者實際做了實驗,同一個<resource>中,同時配置了<include><exclude>。

<build>
<resources>
 <resource>
 <directory>src/main/resources</directory>
 <filtering>true</filtering>
 <includes>
  <include>application.properties</include>
 </includes>
 <excludes>
  <exclude>application.properties</exclude>
 </excludes>
 </resource>
</resources>
</build>

編譯結(jié)果,配置文件沒有打包進(jìn)入target/classes。說明這個論點是有問題的。說明在同一個resource中兩種配置是取交集的。

2.5 子目錄

資源目錄也是支持子目錄的。即可以在資源目錄下面創(chuàng)建子目錄,在打包過程中會保留子目錄結(jié)構(gòu)。例如:

resources
 -test
 --app.xml
 -application.yml
 -application.properties
 -application.xml

在項目編譯后,如果子目錄中資源文件被保留,那么子目錄的結(jié)構(gòu)也是保留的。例如:

target
 -classes
 --test
 ---app.xml
 -application.yml
 -application.properties
 -application.xml 

第二部分 讀取resources資源

例如我們的配置文件properties類型的配置文件,可以使用下面的語句進(jìn)行讀?。?/p>

方法1,從編譯后的整個classes目錄下去找;

InputStream is = this.getClass().getResourceAsStream("/" +application.properties);

方法2,ClassLoader從整個classes目錄找;

InputStream is = this.getClass().getClassLoader().getResourceAsStream(application.properties);

讀取使用Java的工具包java.util.Properties

import java.util.Properties;

Properties properties = new Properties();
InputStream is = this.getClass().getClassLoader().getResourceAsStream(application.properties);
properties.load(is)

//獲取配置文件中name的配置值
System.out.println(properties.get(getProperty("name")))

其他類型的配置文件讀取讀者可以執(zhí)行查找資料。

參考文獻(xiàn)及資料

1、Maven Resources Plugin,鏈接:https://maven.apache.org/components/plugins-archives/maven-resources-plugin-2.6/

2、Maven資源過濾的配置,鏈接:http://c.biancheng.net/view/5285.html

到此這篇關(guān)于Maven項目中resources配置總結(jié)的文章就介紹到這了,更多相關(guān)Maven resources配置內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java  實現(xiàn)輸出隨機圖片實例代碼

    java 實現(xiàn)輸出隨機圖片實例代碼

    這篇文章主要介紹了java 實現(xiàn)輸出隨機圖片實例代碼的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • 通過dom4j解析xml字符串(示例代碼)

    通過dom4j解析xml字符串(示例代碼)

    本篇文章主要是對通過dom4j解析xml字符串的示例代碼進(jìn)行了介紹,需要的朋友可以過來參考下,希望對大家有所幫助
    2013-12-12
  • Java IO文件編碼轉(zhuǎn)換實現(xiàn)代碼

    Java IO文件編碼轉(zhuǎn)換實現(xiàn)代碼

    這篇文章主要介紹了Java IO文件編碼轉(zhuǎn)換實現(xiàn)代碼,有需要的朋友可以參考一下
    2013-12-12
  • java網(wǎng)上商城開發(fā)之郵件發(fā)送功能(全)

    java網(wǎng)上商城開發(fā)之郵件發(fā)送功能(全)

    這篇文章主要介紹了java網(wǎng)上商城開發(fā)之郵件發(fā)送功能,第一部分介紹了環(huán)境配置,第二部分則介紹了具體實現(xiàn)代碼,感興趣的小伙伴們可以參考一下
    2016-03-03
  • Java8 Optional判空詳解(簡化判空操作)

    Java8 Optional判空詳解(簡化判空操作)

    這篇文章主要給大家介紹了關(guān)于Java8 Optional判空(簡化判空操作)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05
  • SpringMVC圖片文件跨服務(wù)器上傳

    SpringMVC圖片文件跨服務(wù)器上傳

    這篇文章主要為大家詳細(xì)介紹了SpringMVC圖片文件跨服務(wù)器上傳,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • Java發(fā)送https請求代碼實例

    Java發(fā)送https請求代碼實例

    這篇文章主要介紹了Java發(fā)送https請求代碼實例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-08-08
  • Java實現(xiàn)設(shè)計模式之責(zé)任鏈模式

    Java實現(xiàn)設(shè)計模式之責(zé)任鏈模式

    責(zé)任鏈模式是一種行為設(shè)計模式,允許你將請求沿著處理鏈發(fā)送,然后處理者都可對其進(jìn)行處理,完成后可以再將其傳遞給下一個處理者。下面將會舉例說明什么是責(zé)任鏈模式,責(zé)任鏈模式該如何使用
    2022-08-08
  • spring解決循環(huán)依賴的方案示例

    spring解決循環(huán)依賴的方案示例

    這篇文章主要介紹spring如何解決循環(huán)依賴,文中有相關(guān)的代碼示例給大家參考,對我們的學(xué)習(xí)或工作有一定的幫助,感興趣的同學(xué)可以借鑒閱讀
    2023-05-05
  • Java8新特性Stream流中anyMatch和allMatch和noneMatch的區(qū)別解析

    Java8新特性Stream流中anyMatch和allMatch和noneMatch的區(qū)別解析

    這篇文章主要介紹了Java8新特性Stream流中anyMatch和allMatch和noneMatch的區(qū)別解析,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2024-01-01

最新評論

军事| 涿州市| 九龙城区| 磴口县| 娱乐| 承德县| 曲靖市| 城步| 石泉县| 临澧县| 安陆市| 靖安县| 屯门区| 宜昌市| 隆子县| 米脂县| 共和县| 施秉县| 汽车| 张家界市| 宁德市| 济宁市| 盐山县| 遂平县| 高安市| 永昌县| 崇明县| 九龙坡区| 昔阳县| 吉安市| 新兴县| 海门市| 松江区| 惠东县| 石河子市| 永兴县| 娱乐| 万盛区| 京山县| 修文县| 定安县|