Maven的resources插件配置详解(含过滤器的配置详解)
resources 插件,负责将配置文件复制到编译目录中。两种配置文件 main-resources、test-resources,maven 默认只关注 resources 目录下的配置文件,其他目录下的配置文件会被忽略。如果有配置文件不在 resources 目录下,这个时候就需要指定配置文件所在的目录:<build><resources><resource>
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=liaowenxiong
src/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 配置内容如下:
<build>
<filters>
<!--指定过滤文件,文件名使用变量的值替换-->
<filter>
src/main/resources/${fileName}.properties
</filter>
</filters>
<resources>
<resource>
<directory>src/main/resources</directory>
<!--启用过滤器-->
<filtering>true</filtering>
</resource>
</resources>
</build>
打开命令终端,切换到 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 文件中对应属性的值。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)