Maven的resources插件配置详解(含过滤器的配置详解)
文章目錄
- 指定配置文件所在的目錄
- 使用 excludes 元素可以排除指定的配置文件
- 使用 includes 元素可以指定要處理的文件
- 處理測試資源
- 過濾器配置
resources 插件,負責將配置文件復制到編譯目錄中。Maven Java Web 項目默認的編譯目錄 target/classes。
兩種配置文件 src/main/resources、src/test/resources,Maven 默認只關注 src/main/resources 目錄下的配置文件,其他目錄下的配置文件會被忽略。
指定配置文件所在的目錄
如果有配置文件不在 resources 目錄下,這個時候就需要指定配置文件所在的目錄:
<build><!--指定屬性文件,里面含有鍵值對--><filters> <filter>${user.home}/antx.properties</filter> </filters> <resources><resource><!--指定配置文件所在的目錄--><directory>src/main/java</directory><!--啟用上面的過濾文件--><filtering>true</filtering> </resource></resources> </build>使用 excludes 元素可以排除指定的配置文件
<resources><resource><directory>src/main/java</directory><!--排除所有的txt文件,其他的文件都會被復制--><excludes><exclude>**/*.txt</exclude></excludes></resource> </resources>使用 includes 元素可以指定要處理的文件
<resources><resource><directory>src/main/java</directory><!--除了txt文件,其他的文件都不會被復制--><includes><include>**/*.txt</include></includes></resource> </resources>處理測試資源
處理測試資源,其實就是默認處理 src/test/resources 下的資源,需要在 pom.xml 中配置如下:
<build><filters><filter>src/main/resources/${fileName}.properties</filter></filters><resources><resource><directory>src/main/resources</directory><filtering>true</filtering></resource></resources><testResources><testResource><!--指定測試資源的存放目錄--><directory>src/test/resources</directory></testResource></testResources> </build>打開命令終端,切換到 pom.xml 文件所在的目錄下,執行下面的指令:
[~/documents/IdeaProjects/demo02]$ mvn resources:testResources [INFO] Scanning for projects... [INFO] [INFO] -------------------------< com.example:demo02 >------------------------- [INFO] Building demo02 1.0-SNAPSHOT [INFO] --------------------------------[ jar ]--------------------------------- [INFO] [INFO] --- maven-resources-plugin:2.6:testResources (default-cli) @ demo02 --- [INFO] Using 'UTF-8' encoding to copy filtered resources. [INFO] Copying 1 resource [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 0.893 s [INFO] Finished at: 2022-01-26T20:43:22+08:00 [INFO] ------------------------------------------------------------------------我們再看看 target 目錄下有什么內容:
[~/documents/IdeaProjects/demo02]$ ls target test-classes如上查詢結果可知,執行 mvn resources:testResources 會產生一個 test-classes 目錄,src/test/resources 目錄下的資源文件會復制到 test-classes 目錄下。
過濾器配置
~/test.properties 文件中的內容:
name=liaowenxiongsrc/main/java/test.txt 配置文件中的內容如下:
您好 ${name}${屬性名/變量名},表示獲取對應屬性/變量的值。
pom.xml 配置過濾文件,資源中啟用過濾器:
<build><filters><!-- 指定過濾器文件,其實就是個屬性文件,里面含有鍵值對 --><filter>${user.home}/test.properties</filter></filters><resources><resource><!--指定配置文件所在的目錄--><directory>src/main/java</directory><!--啟用上面的過濾文件--><filtering>true</filtering></resource></resources> </build>執行下面的命令處理資源文件:
[~/documents/IdeaProjects/demo02]$ mvn resources:resources [INFO] Scanning for projects... [INFO] [INFO] -------------------------< com.example:demo02 >------------------------- [INFO] Building demo02 1.0-SNAPSHOT [INFO] --------------------------------[ jar ]--------------------------------- [INFO] [INFO] --- maven-resources-plugin:2.6:resources (default-cli) @ demo02 --- [INFO] Using 'UTF-8' encoding to copy filtered resources. [INFO] Copying 3 resources [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 0.976 s [INFO] Finished at: 2022-01-26T18:31:29+08:00 [INFO] ------------------------------------------------------------------------執行上述的命令之后,Maven 會將指定目錄下的資源文件復制到編譯輸出目錄(target/classes)下,并且資源文件 src/main/java/test.txt 中的 ${name} 會替換成過濾文件中的對應屬性的值,過濾文件中含有屬性 name,其值為 liaowenxiong,所以就將 ${name} 替換成 liaowenxiong,因此進入 target/classes 目錄下,打開 test.txt 文件,會看到以下的內容:
您好 liaowenxiong舉個典型的應用場景:
開發環境和測試環境的數據庫連接參數不同,你可以創建兩份文件數據庫參數文件(properties 文件),然后再創建一份真正需要代碼解析的數據庫配置文件(properties 文件或者 xml 文件)。
開發環境下的數據庫參數文件 db1.properties 內容如下:
url=jdbc:mysql://192.168.200.123:3306/dev username=root password=123測試環境下的數據庫參數文件 db2.properties 的內容如下:
url=jdbc:mysql://192.168.200.124:3306/test username=root password=456數據庫配置文件 db.properties 的內容如下:
driverClassName=com.mysql.jdbc.Driver # 如果是數據庫在本地,且端口號是3306,則可以簡寫成:jdbc:mysql:///test url=${url} userName=${userName} password=${password} # 連接池初始化時會生成5個連接對象 initialSize=5 maxActive=10 maxWait=3000我把三份屬性文件都放在 src/main/resources 目錄下,如下圖所示:
pom.xml 配置內容如下:
打開命令終端,切換到 pom.xml 所在的目錄下,執行下面的命令:
[~/documents/IdeaProjects/demo02]$ mvn resources:resources -DfileName=db1 [INFO] Scanning for projects... [INFO] [INFO] -------------------------< com.example:demo02 >------------------------- [INFO] Building demo02 1.0-SNAPSHOT [INFO] --------------------------------[ jar ]--------------------------------- [INFO] [INFO] --- maven-resources-plugin:2.6:resources (default-cli) @ demo02 --- [INFO] Using 'UTF-8' encoding to copy filtered resources. [INFO] Copying 3 resources [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 0.948 s [INFO] Finished at: 2022-01-26T20:25:49+08:00 [INFO] ------------------------------------------------------------------------在命令終端查看生成的數據庫配置 db.properties 文件:
[~/documents/IdeaProjects/demo02]$ cat target/classes/db.properties driverClassName=com.mysql.jdbc.Driver # 如果是數據庫在本地,且端口號是3306,則可以簡寫成:jdbc:mysql:///test url=jdbc:mysql://192.168.200.123:3306/dev userName=root password=123 # 連接池初始化時會生成5個連接對象 initialSize=5 maxActive=10 maxWait=3000上述可以看到,屬性 url、userName、password 的值全部替換成 db1.properties 文件中對應屬性的值。
執行 mvn resources:resources時,如果指定變量 fileName=db2,看看效果如何:
[~/documents/IdeaProjects/demo02]$ mvn resources:resources -DfileName=db2 [INFO] Scanning for projects... [INFO] [INFO] -------------------------< com.example:demo02 >------------------------- [INFO] Building demo02 1.0-SNAPSHOT [INFO] --------------------------------[ jar ]--------------------------------- [INFO] [INFO] --- maven-resources-plugin:2.6:resources (default-cli) @ demo02 --- [INFO] Using 'UTF-8' encoding to copy filtered resources. [INFO] Copying 3 resources [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 0.950 s [INFO] Finished at: 2022-01-26T20:31:05+08:00 [INFO] ------------------------------------------------------------------------在命令終端查看生成的數據庫配置 db.properties 文件:
[~/documents/IdeaProjects/demo02]$ cat target/classes/db.properties driverClassName=com.mysql.jdbc.Driver # 如果是數據庫在本地,且端口號是3306,則可以簡寫成:jdbc:mysql:///test url=jdbc:mysql://192.168.200.124:3306/test userName=root password=456 # 連接池初始化時會生成5個連接對象 initialSize=5 maxActive=10 maxWait=3000上述可以看到,屬性 url、userName、password 的值全部替換成 db2.properties 文件中對應屬性的值。
總結
以上是生活随笔為你收集整理的Maven的resources插件配置详解(含过滤器的配置详解)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 梓川咲太怎么读 梓川咲太读音是啥
- 下一篇: 爱丽丝梦游仙境的主要内容 爱丽丝梦游仙境