- 指定配置文件所在的目录
- 使用 excludes 元素可以排除指定的配置文件
- 使用 includes 元素可以指定要处理的文件
- 处理测试资源
- 过滤器配置
target/classes
。
两种配置文件 src/main/resources、src/test/resources,Maven 默认只关注 src/main/resources 目录下的配置文件,其他目录下的配置文件会被忽略。
如果有配置文件不在 resources 目录下,这个时候就需要指定配置文件所在的目录:
${user.home}/antx.properties
src/main/java
true
使用 excludes 元素可以排除指定的配置文件
src/main/java
**/*.txt
使用 includes 元素可以指定要处理的文件
src/main/java
**/*.txt
处理测试资源
处理测试资源,其实就是默认处理 src/test/resources 下的资源,需要在 pom.xml 中配置如下:
src/main/resources/${fileName}.properties
src/main/resources
true
src/test/resources
打开命令终端,切换到 pom.xml 文件所在的目录下,执行下面的指令:
[~/documents/IdeaProjects/demo02]$ mvn resources:testResources
[INFO] Scanning for projects...
[INFO]
[INFO] --------------------------------------------------
[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=liaowenxiong
src/main/java/test.txt 配置文件中的内容如下:
您好 ${name}
${属性名/变量名}
,表示获取对应属性/变量的值。
pom.xml 配置过滤文件,资源中启用过滤器:
${user.home}/test.properties
src/main/java
true
执行下面的命令处理资源文件:
[~/documents/IdeaProjects/demo02]$ mvn resources:resources
[INFO] Scanning for projects...
[INFO]
[INFO] --------------------------------------------------
[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 配置内容如下:
src/main/resources/${fileName}.properties
src/main/resources
true
打开命令终端,切换到 pom.xml 所在的目录下,执行下面的命令:
[~/documents/IdeaProjects/demo02]$ mvn resources:resources -DfileName=db1
[INFO] Scanning for projects...
[INFO]
[INFO] --------------------------------------------------
[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] --------------------------------------------------
[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 文件中对应属性的值。