springboot中maven文件pom.xml的<resource>下的<includes>和<excludes>
filtering标签和includes,excludes标签都是resource标签下的标签,它们经常出入成双。然而这两者根本就是截然不同的。
filtering用于扩大范围,什么范围呢?maven默认只会替换pom文件中的占位符属性,不会触碰resources下相关文件的.但filtering=true了,就可以触碰了,触碰的效果就是能替换resources下指定文件的占位符属性.
默认情况下,maven打包时会包含resources下所有的文件.如果我们只想让指定的几个文件被打包,那就将这几个文件放在includes标签下处理;同理: 如果我们不想让这几个文件被打包,那就将这几个文件放在excludes标签下处理.
filtering的单独使用 |
- 没有使用filtering时:
pom文件中定义在不同激活区的属性xxx
<profiles><profile><id>dev</id><properties><xxx>dev</xxx></properties></profile><profile><id>sit</id><properties><xxx>sit</xxx></properties></profile><profile><id>uat</id><properties><xxx>uat</xxx></properties></profile>
</profiles>
bootstrap.properties文件中定义的占位符属性${xxx}
spring.cloud.config.profile=${xxx}
使用-Psit打包后target下对应文件原封不动,没被替换:
spring.cloud.config.profile=${xxx}
- 使用filtering后:
<build><resources><resource><directory>${project.basedir}/src/main/resources</directory><filtering>true</filtering></resource></resources>
</build>
使用-Psit打包后target下对应文件中${}占位符被替换了:
spring.cloud.config.profile=sit
3.注意点:
- 若单纯是maven项目,则可以使用${}占位符;
- 若是springboot项目,则占位符需使用@xxx@,使用${}将失效.spring-boot-starter-parent为了防止与pom的占位符冲突,通过maven-resources-plugin将maven使用的资源占位符专门设置为:@ ,如下:
<properties><java.version>1.6</java.version><resource.delimiter>@</resource.delimiter> <!-- delimiter that doesn't clash with Spring ${} placeholders --><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><maven.compiler.source>${java.version}</maven.compiler.source><maven.compiler.target>${java.version}</maven.compiler.target>
</properties><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-resources-plugin</artifactId><version>2.6</version><configuration><delimiters><delimiter>${resource.delimiter}</delimiter></delimiters><useDefaultDelimiters>false</useDefaultDelimiters></configuration>
</plugin>
可通过自己配置plugin覆盖此处配置:
<build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-resources-plugin</artifactId><version>3.1.0</version><configuration><encoding>utf-8</encoding><!-- 使Spring Boot支持${}占位符 --><useDefaultDelimiters>true</useDefaultDelimiters></configuration></plugin></plugins>
</build>
includes与excludes的使用 |
resources下文件有多个:
- 如果使用了include
<build><resources><resource><directory>${project.basedir}/src/main/resources</directory><includes><include>dev/</include></includes></resource></resources>
</build>
则打包时进入target的是这样的:
- 如果使用了exclude
<build><resources><resource><directory>${project.basedir}/src/main/resources</directory><excludes><exclude>dev/</exclude></excludes></resource></resources>
</build>
则打包时进入target的是这样的:
- 如果同时使用了include和exclude,
<build><resources><resource><directory>${project.basedir}/src/main/resources</directory><includes><include>dev/</include></includes><excludes><exclude>dev/application-dev.*</exclude></excludes></resource></resources>
</build>
则打包时是这样的:
一个排除,一个包含,可以各自单独使用,也可以混合使用,混合使用时,如果范围有交集,会被排除掉,通常用于过滤掉文件夹中的几个特殊文件
filtering与include,exclude混合使用 |
有三大作用:
排除资源-------使用excludes排除
包括资源, 替换属性-------使用include包含, 且使用filtering=true过滤
包括资源, 不替换属性-------使用include包含,且不使用filtering过滤
如果这样用:
<build><resources><resource><directory>${project.basedir}/src/main/resources</directory>//资源过滤: 只保留dev文件夹下名字不是application-dev的文件<includes><include>dev/</include></includes><excludes><exclude>dev/application-dev.*</exclude></excludes>//扩大属性替换范围: 替换资源过滤最终留下来的文件中的@xxx@占位符属性<filtering>true</filtering></resource></resources>
</build>
那么打包结果:
target文件夹下的application-dev2.properties文件的属性值变化:
spring.cloud.config.profile=${xxx} -----> spring.cloud.config.profile=sit
总结:
filtering用于打包时扩大maven替换占位符属性的范围, true表示会替换所在resource标签确定的文件范围内的占位符属性
include和exclude用于打包时资源过滤, 主要目的是把resources下不想要的文件排除掉,不打进包中.
它俩都是resource标签下的子标签, 一个用于过滤资源,一个用于是否替换占位符属性, 一般都是搭配使用, 但两者功能迥异.
扩展:
在springboot项目中,spring-boot-starter-parent存在以下代码:
<resources><resource><directory>${basedir}/src/main/resources</directory><filtering>true</filtering><includes><include>**/application*.yml</include><include>**/application*.yaml</include><include>**/application*.properties</include></includes></resource><resource><directory>${basedir}/src/main/resources</directory><excludes><exclude>**/application*.yml</exclude><exclude>**/application*.yml</exclude><exclude>**/application*.properties</exclude></excludes></resource></resources>
其中第一段<resource>配置声明:在src/main/resources目录下,仅**/application*.yml、**/application*.yml、**/application*.properties文件是资源文件,参与打包过程;并且这些文件可以被替换占位符属性。
第二段<resource>配置声明:同样在src/main/resources目录下,除**/application*.yml、**/application*.yml、**/application*.properties文件外的其他文件是资源文件,参与打包过程;并且这些文件不能被替换占位符属性。
注意:
- 一个<resource>代表一个资源配置。不同的<resource>并无关系。前面提到的<include>和<exclude>在同一个<resource>中,即对同一个资源进行资源管理;而在spring-boot-starter-parent中,<include>和<exclude>在不同的<resource>,分别对各自<resource>进行管理。
- 若在自己的pom中配置如下:
<resources><resource><directory>${basedir}/src/main/resources</directory><filtering>true</filtering><includes><include>**/application*.yml</include></includes></resource><resource><directory>${basedir}/src/main/resources</directory><excludes><exclude>**/application*.yml</exclude></excludes></resource></resources>
将会覆盖spring-boot-starter-parent中的代码,即spring-boot-starter-parent中的代码将失效。
springboot中maven文件pom.xml的<resource>下的<includes>和<excludes>相关推荐
- pom文件找不到子项目_java,eclipse_eclipse中maven项目pom.xml文件找不到parent要怎么解决?,java,eclipse,maven - phpStudy...
eclipse中maven项目pom.xml文件找不到parent要怎么解决? 在maven项目中方pom.xml文件找不到parent,maven clean报错如下: [ERROR] [ERROR ...
- maven的pom.xml文件中导入c3p0连接池,在运行时报错
maven的pom.xml文件中导入c3p0连接池运行时报错 错误内容如下: java.lang.AbstractMethodError: Method com/mchange/v2/c3p0/imp ...
- 在maven的pom.xml文件中导入tomcat插件后启动tomcat7报错
在maven启用tomcat有两种方式,一种是集成本地的tomcat,另一种是在pom.xml文件中插入tomcat插件,本人小白初学第一种方式运行成功后,开始实验第二种方式,运行后出现报错 原因是端 ...
- Java 中JAF、CORBA、JTA、JAXB、JAX-WS使用Maven的pom.xml文件配置
本文主要介绍Java EE中已经弃用的模块,需要单独引用JAF(java.activation).CORBA(java.corba).JTA(java.transaction).JAXB(java.x ...
- Linux中把文件夹打成war包,SpringBoot中maven项目打成war包部署在liunx服务器上的方法...
说明:Spring Boot由于内嵌了如Tomcat,Jetty和Undertow这样的容器,也就是说可以直接跑起来,用不着再像Spring项目还需要外置的Tomcat等容器来进行部署工作了,通过启动 ...
- Maven的pom.xml文件详解------The Basics
转载自 Maven的pom.xml文件详解------The Basics Maven坐标 GroupId.artifactId和version构成了Maven的坐标(groupId和version ...
- Maven的pom.xml文件详解------Build Settings
转载自 Maven的pom.xml文件详解------Build Settings 根据POM 4.0.0 XSD,build元素概念性的划分为两个部分:BaseBuild(包含poject bui ...
- Maven的pom.xml文件详解------Environment Settings
转载自 Maven的pom.xml文件详解------Environment Settings Issue Management 使用的缺陷跟踪系统(Bugzilla,TestTrack,Clear ...
- maven项目pom.xml中parent标签的使用
本文来说下maven项目pom.xml中parent标签的使用 文章目录 parent标签 parent标签由来 依赖排除 本文小结 parent标签 parent标签使用例子 <!--父项目的 ...
最新文章
- js判断只能输入数字或小数点
- 转:函数要多小才够好——谈小函数之道
- php正则获取标签,PHP通过正则匹配中文字符 过滤html标签 获取文本内容
- elk入门_ELK堆栈入门
- JS之setTimeOut与clearTimeOut
- vscode创建代码片段
- Python 学习笔记:class
- (环境搭建+复现)ZZZCMS模版注入+文件包含getshell
- bccomp php扩展,PHP 中文工具包 ChineseUtil v2.0 发布,引入 FFI 提升性能节省内存
- 因为毕业半年挣了100万,帅地在CSDN被喷上热榜
- CAN总线网络知识(一)
- 仅需三步学会使用低代码ThingJS与森数据DIX数据对接
- 【游戏开发创新】当我学了Blender 建模,自制3D电脑桌面,回收站爆发了,把我做的模型都吐了出来(Blender | Unity | FBX)
- 微波背景辐射的发现(获诺贝尔奖)——彭齐亚斯和威尔逊
- 小酌重构系列[18]——重命名
- 在你生日那天,哈勃望远镜看到了什么
- 能链科技子公司上海能链获颁高新技术企业资质
- python制作三维码_2020你没有三维码就out了,5秒教你学会制作三维码
- 【历史上的今天】10 月 18 日:Internet Explorer 7 正式发布;全球首家网络银行开业;“美版红白机” NES 诞生
- 周大福家源信物 | 连心携梦,点亮璀璨星愿