这里对resources、profile标签的使用进行介绍

resources 标签

打包资源

Maven中会按照标准目录结构,将src/main/resources目录下的资源文件打包到jar或war中。但有时为了方便文件的组织管理,有些资源文件可能并不在上述标准目录下。典型地有MaBatis的sql映射文件。为此,可通过resources标签实现对资源文件的打包

...
<build>...<resources><!-- 将ConfigFile目录下的 file1.properties 文件打包 --><resource><directory>src/main/java/com/aaron/SpringBoot1/ConfigFile</directory><includes><include>file1.properties</include></includes></resource>...</resources>...
</build>
...

从下图可以看到,只有我们指定打包的 file1.properties 文件被打包进去了,而 file2.properties 文件则未被打包进去

filtering 标签

ConfigFile目录下两个属性文件内容如下

通过下面的POM文件内容可知,我们通过properties标签来定义上述两个资源文件所引用的变量code.author。与此同时通过resource标签将上述两个资源文件均打包进去。值得注意的是,这两个资源的filtering标签分别为false、true。该标签的作用在于,是否将配置文件中的引用变量替换为真实的值。具体地,当这里的filtering为true时,资源文件中的 @code.author@ 就会被替换为 Aaron

...
<properties><code.author>Aaron</code.author>
</properties>
...
<build>...<resources><!-- 将ConfigFile目录下的file1.properties文件打包 --><resource><directory>src/main/java/com/aaron/SpringBoot1/ConfigFile</directory><!-- 默认值即为false,故可省略 --><filtering>false</filtering><includes><include>file1.properties</include></includes></resource><!-- 将ConfigFile目录下的file2.properties文件打包 --><resource><directory>src/main/java/com/aaron/SpringBoot1/ConfigFile</directory><filtering>true</filtering><includes><include>file2.properties</include></includes></resource>...</resources>...
</build>

测试结果如下,符合预期

profiles 标签

实际开发中,多环境的配置非常常见。为了便于管理各种不同环境下的配置,这里可以借助Maven的profiles标签实现

根据不同的环境打包相应的资源文件

假设在 src/main/java/com/aaron/SpringBoot1/ProfileFile 下,存在分别名为 profile-dev.properties、profile-test.properties的两个属性文件。显然,它们分别是开发dev、测试test环境。为了实现根据不同的环境打包相应的资源文件,可以通过 properties、resource 标签实现

<profiles><!-- 开发环境 --><profile><id>dev</id><activation><!--指定该环境为默认配置--><activeByDefault>true</activeByDefault></activation><properties><current.env>dev</current.env></properties></profile><!-- 测试环境 --><profile><id>test</id><properties><current.env>test</current.env></properties></profile></profiles><build><resources><resource><directory>src/main/java/com/aaron/SpringBoot1/ProfileFile</directory><includes><include>profile-${current.env}.properties</include></includes></resource>...</resources>
</build>

这样,选择不同的profile,即会相应改变current.env属性的值。这样,在resource标签处通过引用该属性即可实现在不同的环境下只打包相应的文件。这里,我们以使用测试test环境为例。可以看到其只会将 profile-test.properties 文件打包进去,而不会打包profile-dev.properties文件

properties 标签

当然也可以直接在profile标签下使用properties标签来定义不同环境下属性变量的值,然后直接在相应的资源文件直接引用相关的属性变量来实现多环境配置。例如下面的mysql.properties文件中,引用了两个属性值——mysql.username、datasource.url

username=@mysql.username@
mysql=@datasource.url@

然后,我们在各环境的profile下定义上述两个属性的值。值得注意的是,对于resource标签的mysql.properties文件而言,一定要将 filtering 标签设为true。否则无法将引用变量替换为值

<profiles><!-- 开发环境 --><profile><id>dev</id><activation><!--指定该环境为默认配置--><activeByDefault>true</activeByDefault></activation><properties><mysql.username>root</mysql.username><datasource.url>jdbc:mysql://127.0.0.1</datasource.url></properties></profile><!-- 测试环境 --><profile><id>test</id><properties><mysql.username>admin</mysql.username><datasource.url>jdbc:mysql://12.34.56.78</datasource.url></properties></profile>
</profiles><build><resources><resource><directory>src/main/java/com/aaron/SpringBoot1/ProfileFile</directory><filtering>true</filtering><includes><include>mysql.properties</include></includes></resource>...</resources>
</build>

这里,我们以使用测试test环境为例。可以看到mysql.properties文件中的引用变量已经被替换为test环境中定义的属性值

filters

虽然我们可以在profile标签下使用properties标签来定义不同环境下的属性值。但是一旦属性数量较大,就会显得POM文件非常冗长了。为此,我们可以将原本properties标签定义的属性变量放置在一个资源文件下,并通过filters标签来进行指定。故首先,我们将dev、test环境下的属性值定义在两个不同的文件mysql-profile-dev.properties、mysql-profile-test.properties中,内容如下所示

然后,通过filters标签指定各profile下的自定义属性的文件。当然,resource 标签下的filtering标签,也必须为true

<profiles><!-- 开发环境 --><profile><id>dev</id><activation><!--指定该环境为默认配置--><activeByDefault>true</activeByDefault></activation><build><filters><filter>src/main/java/com/aaron/SpringBoot1/ProfileFile/mysql-profile-dev.properties</filter></filters></build></profile><!-- 测试环境 --><profile><id>test</id><build><filters><filter>src/main/java/com/aaron/SpringBoot1/ProfileFile/mysql-profile-test.properties</filter></filters></build></profile></profiles><build><resources><resource><directory>src/main/java/com/aaron/SpringBoot1/ProfileFile</directory><filtering>true</filtering><includes><include>mysql.properties</include></includes></resource>...</resources>
</build>

这里,我们以使用dev环境为例。可以看到mysql.properties文件中的引用变量已经被替换为 mysql-profile-dev.properties文件中定义的属性值。值得一提的是,filter标签下的文件mysql-profile-dev.properties、mysql-profile-test.properties并不会被打包

java如何按照标签替换_Maven(五):resources、profiles标签的实践相关推荐

  1. R语言ggplot2可视化线图(line plot)、自定义设置X轴标签为字符串标签,将原有的指定间隔的数字标签替换为指定的字符串标签(change x axis labels into string

    R语言ggplot2可视化线图(line plot).自定义设置X轴标签为字符串标签,将原有的指定间隔的数字标签替换为指定的字符串标签(change x axis labels into string ...

  2. java如何使用正则表达式替换所有前端标签

    Java使用正则表达式替换所有前端标签的方法如下: 首先,要使用正则表达式替换字符串,需要使用Java的java.util.regex包. 然后,需要创建一个Pattern对象,该对象表示要匹配的正则 ...

  3. java web框架struts,JavaWeb框架_Struts2_(五)-----Struts2的标签库

    1.Struts2的标签库 1.1 Struts2标签库概述 Struts2的标签库可以分为以下3类:用户界面标签.非用户界面标签.AJAX标签; 2.1.1 Struts2标签库的分类和使用 1.  ...

  4. javaweb学习总结(二十五)——jsp简单标签开发(一)

    一.简单标签(SimpleTag) 由于传统标签使用三个标签接口来完成不同的功能,显得过于繁琐,不利于标签技术的推广, SUN公司为降低标签技术的学习难度,在JSP 2.0中定义了一个更为简单.便于编 ...

  5. Java NIO系列教程(十 五)Java NIO Path

    转载自  Java NIO系列教程(十 五)Java NIO Path 译文链接  译者:章筱虎 Java的Path接口是Java NIO2 的一部分,是对Java6 和Java7的 NIO的更新.J ...

  6. (五)Struts2 标签

    所有的学习我们必须先搭建好Struts2的环境(1.导入对应的jar包,2.web.xml,3.struts.xml) 第一节:Struts2 标签简介 Struts2 自己封装了一套标签,比JSTL ...

  7. JAVA之旅(三十五)——完结篇,终于把JAVA写完了,真感概呐!

    JAVA之旅(三十五)--完结篇,终于把JAVA写完了,真感概呐! 这篇博文只是用来水经验的,写这个系列是因为我自己的java本身也不是特别好,所以重温了一下,但是手比较痒于是就写出了这三十多篇博客了 ...

  8. java 实现将图片替换到word 文档中

    首先将word 转换成xml ,再修改后缀名位ftl ,并用freemark 标签替换其中的主要设置,模板参考如下 <?xml version="1.0" encoding= ...

  9. java 自定义标签实现的_Java实现自定义标签的步骤——带你实现自己的标签

    一.自定义标签: 使用标签的好处:使用方便.简洁.实现代码重用 二.自定义标签的形式: 1.标签属性: 2.标签体 (1)无标签体――空标签 (2)有标签体 · 普通文本 · 脚本片断 · 脚本表达式 ...

最新文章

  1. mysql返回页面乱码java_解决Java程序使用MySQL时返回参数为乱码的示例教程
  2. 快速理解https是如何保证安全的
  3. django项目如何连接前端_工作笔记前端小白如何搭建前端项目
  4. 【安全测试】:某系统短信修改密码,绕过逻辑漏洞
  5. 计算机和学数制和码制,[文学]第二章 计算机中的数制和码制.ppt
  6. 为啥选择python
  7. selenium grid原理
  8. 版本控制系统相关知识
  9. Python基础学习(二)
  10. jhipster使用简明教程
  11. JavaScript模板引擎
  12. 用python刷微信投票_微信投票知道 微信刷票能否python抓取微信投票_大师网络投票刷票网...
  13. 遥感图像空间分辨率获取
  14. 深大uooc学术道德与学术规范教育第十章
  15. 计算机音乐谱毛不易,毛不易《平凡的一天》五线乐谱
  16. qq绑定outlook邮箱服务器,Outlook2013怎么绑定QQ邮箱
  17. C++的几种char类型
  18. 【数据结构】用堆排序解决TOPK问题
  19. Java中文编程开发,让Java编写更加容易
  20. 记一次蓝屏的解决,错误代码IRQL_NOT_LESS_OR_EQUAL

热门文章

  1. 俄罗斯机器人雄鹿_世界上最''倒霉''的机器人:逼真到难以置信,为忍受痛苦而生...
  2. 皮一皮:家里出了个不孝子...
  3. 皮一皮:颜值的重要。。。
  4. AI 摄像头翻车:把光头裁判误为足球,观众花钱看了个寂寞...
  5. 每日一皮:“快准恨”的程序员叠衣法,还不快学起来?
  6. 自律到极致-人生才精致:第12期
  7. cop2000计算机组成原理,COP2000计算机组成原理-南昌大学网络教学平台.doc
  8. html网页共用头部和脚部,如何在HTML不同的页面中,共用头部与尾部?_html/css_WEB-ITnose...
  9. mysql时间戳和日期转换
  10. {ValueError}invalid literal for int() with base 10: ‘1.0‘