文章目录

  • 指定配置文件所在的目录
  • 使用 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=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 文件中对应属性的值。

Maven的resources插件配置详解(含过滤器的配置详解)相关推荐

  1. ubuntu apache2配置详解(含虚拟主机配置方法)

    在Windows下,Apache的配置文件通常只有一个,就是httpd.conf.但我在Ubuntu Linux上用apt-get install apache2命令安装了Apache2后,竟然发现它 ...

  2. matlab解含字母方程,求助关于解含字母参数方程组的问题

    我现在需要解一个含字母的方程组,写的代码为 [x,y]=solve('lac*cos(a0-a1)+lab*cos(a2)-lcd-lbd*cos(a3)','lac*sin(a0-a1)+lab*s ...

  3. Maven的单元测试插件maven-surefire-plugin详解

    文章目录 pom.xml 的配置(注意事项,非常重要) 测试案例 执行测试命令 surefire 插件配置 pom.xml 的配置(注意事项,非常重要) 1.必须引入 maven-surefire-p ...

  4. maven assembly打包插件详解

    定义 来自官方的定义: Maven Assembly Plugin relies on the provided assembly descriptors to dictate its executi ...

  5. java 日志 异步_log4j 详解异步日志的配置和测试

    log4j 详解异步日志的配置和测试 日志可以帮助我们分析故障原因,做些数据挖掘的工作.最简单的日志方法,就是自己写个写文件的方法,在需要打日志的时候调用下,但是这显然不可能在实际工程上用.还有个问题 ...

  6. nacos 配置不会动态刷新_Alibaba之Nacos详解

    文章来源: https://blog.csdn.net/weixin_43322048/article/details/107745944 一.介绍 Nacos是阿里巴巴最新开源的项目,核心定位是&q ...

  7. Zabbix+MatrixDB大规模监控与分析解决方案详解(含PPT)

    首先,谢谢原作者:(此文为转载的文章,现将原地址贴出如下:以下文章来源于yMatrix,作者MatrixDB团队Zabbix+MatrixDB大规模监控与分析解决方案详解(含PPT)) 更多精彩Zab ...

  8. STC8H开发(一): 在Keil5中配置和使用FwLib_STC8封装库(图文详解)

    目录 STC8H开发(一): 在Keil5中配置和使用FwLib_STC8封装库(图文详解) STC8H开发(二): 在Linux VSCode中配置和使用FwLib_STC8封装库(图文详解) ST ...

  9. Gitbook详解(四)-配置和说明详解

    文章目录 1. 简述 2. 配置概览 3. 配置示例 3.1 基础配置 3.2 structure 结构配置 3.3 variables 变量配置 3.4 links 链接导航 3.5 styles ...

最新文章

  1. SharePoint【Query Options系列】-- Query Options的一些用法 01. 展开用户列信息
  2. html优化网站的方法,利用HTML优化加快网页速度方法介绍
  3. jQuery 学习之路(1):引子
  4. delphi编译缺少组件 imgedit excel2000等
  5. python基础教程:懒惰属性(延迟初始化)
  6. ARouter源码探究
  7. 先锋展示了可爱鸟形车载机器
  8. stm32端口复用和重映射
  9. mysqladmin命令详解
  10. oracle滚动打补丁,ORACLE打补丁的方法和案例
  11. 机器学习案例实战:Python文本数据分析新闻分类任务
  12. python如何登录并爬取获得百度指数统计图数据
  13. C语言OJ1116,9度OJ 题目1116:加减乘除
  14. 前后端分离跨域上传图片代码
  15. RS笔记:传统推荐模型之FFM (引入特征域的概念) [2015 Criteo]
  16. HTML简单表格的制作
  17. 非线性规划求解_突破 | 杉数求解器COPT首发求解内点法
  18. html实现简易音乐播放器
  19. mosquitto基本使用
  20. TM1637数码管显示

热门文章

  1. java自定义外部接口_如何使用可外部化的接口在Java中自定义序列化
  2. jakarta ee_关于Jakarta EE软件包名称更改的思考
  3. java 8 stream_Java 8 Stream示例
  4. jdk10 换成jdk8_JDK 10的摘要Javadoc标签
  5. jvm gc阻塞时长 占比_jvm进行转义分析需要多长时间? 可能比您想象的要长。
  6. swarm:pending_WildFly Swarm:使用Java EE构建微服务
  7. jms mdb_MDB!= JMS,反之亦然
  8. Java 11:JOIN表,获取Java流
  9. 通过Spring Integration消费Twitter Streaming API
  10. maven检测依赖_检测Maven依赖中介