Maven的pom.xml中resources标签的用法

spring-boot-starter-parent-2.4.1.pom文件中resources标签内容如下:

<build>
    <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*.yaml</exclude>
          <exclude>**/application*.properties</exclude>
        </excludes>
      </resource>
    </resources>
</build>

先做一下实验,看一下结果,我们再来给出这个标签的含义是什么

rsource 下标签作用解释

其中包含的标签含义如下:

  • targetPath:指定了资源构建时的目标目录,默认为base direcory,即source目录结构下
    原文:This is not required if you simply put the resources in that directory structure at the source

  • filtering:决定是否将resources目录下的文件中的tokens(即通过@val@标识的变量)进行参数替换。这里的参数主要有两个来源,一个是来自于pom文件中的properties属性,一个是来源于外部的.properties文件(个人认为这个文件不可与springboot中的配置文件混为一谈)
    那么如何引用外部的.properties文件呢?通过另一个标签下的进行路径的指定。

  • directory:一个相对于POM文件的路径,指定了resources文件的路径。

  • includes:制定了包含文件的patterns,符合样式的且在directory目录下的文件都会包含进编译好的资源文件中

  • excludes:与includes对应,指定不包含在内的模式。如果和includes冲突,优先不包含。即includes和excludes同时包含某个文件,这个这个文件不会被包含打包进资源文件;

一、resources作用

1. 明确告诉Maven 需要打包编译的文件

在项目当中进行编译的时候,他默认是不会对某些文件进行编译的,例如在java文件夹下的mybatis当中的.xml文件,还有在resources文件夹当中有时候会存储一些资源文件,默认有些也是不进行编译的,这里的不进行编译指的是他不会编译到target文件夹当中,并且打包也是。

我们在正常开发项目的时候,有时候获取资源是获取的编译后的路径地址,他会在编译后的路径找不到文件(target文件夹),就是这个原因。

这时候就需要用到resources标签,在pom.xml添加,告诉maven我这些文件也需要编译,并且打包的时候需要打包进去。

2、配置文件取pom当中的值

在现实开发当中,我也遇到过,在pom文件当中配置参数,然后通过application.properties使用@@来进行取pom的值。假如我不想用application.properties取值,而是用了新创建的比如a.properties取值,这时候就需要在pom当中配置resources。

用法另见

二 实战

先在maven工程的resources目录下面创建2个配置文件

在这里插入图片描述
再修改pom文件,修改内容如下

<!--在properties标签中添加变量test.name-->
<properties>
		<test.name>测试内容test01</test.name>
</properties>
<!--在build标签中添加resources标签-->
<build>
		<resources>
			<resource>
				<directory>src/main/resources</directory>
				<filtering>true</filtering>
				<includes>
					<include>a.properties</include>
				</includes>
			</resource>
		</resources>
</build>

再在a.properties文件中引用pom文件中定义的变量值

a.name=${test.name}

b.properties文件中的内容如下

b.name=${test.name}

点击package 进行打包
打包完成后在target目录下的classes类路径下的内容如下
在这里插入图片描述

<build>
		<resources>
			<resource>
				<directory>src/main/resources</directory>
				<filtering>true</filtering>
				<includes>
					<include>a.properties</include>
				</includes>
			</resource>
		</resources>
</build>

从这里可以得出结论:上面这段配置的含义是如果filtering标签的值设置成true,默认值是false,则在工程进行编译打包的时候只会将工程的src/main/resources目录下的includes标签中的资源文件打包进去,并且会进行预编译(就是就将资源文件中引用pom文件中的properties标签中的变量,转化其对应的值),除了includes标签中的资源文件的其它资源文件都不会被打包进去

resources 标签下的 filtering标签 的用法和替换只另见

再修改pom文件的resources标签

<build>
		<resources>
			<resource>
				<directory>src/main/resources</directory>
				<filtering>true</filtering>
				<includes>
					<include>a.properties</include>
				</includes>
			</resource>
			<resource>
				<directory>src/main/resources</directory>
				<!--filtering标签的值默认是false,在这里可写可不写-->
				<filtering>false</filtering>
				<excludes>
					<exclude>a.properties</exclude>
				</excludes>
			</resource>
		</resources>
</build>

进行编译打包,结果如下
在这里插入图片描述

<resource>
    <directory>src/main/resources</directory>
    <!--filtering标签的值默认是false,在这里可写可不写-->
    <filtering>false</filtering>
    <excludes>
        <exclude>a.properties</exclude>
    </excludes>
</resource>

由此可知这段配置的含义是:在项目进行打包的时候会将src/main/resources目录下除了a.properties资源文件的其它资源文件打包进去,并且这些打包进去的资源文件的内容不会进行预编译,之前是什么样子,打完包之后还是什么样子

2.1 总结

如果项目打包的时候,想对某个资源文件中的内容进行预编译再打包进去,而对其他的资源文件不进行预编译处理打包到项目中,则可以按照如下配置进行处理

<resources>
			<resource>
				<directory>src/main/resources</directory>
				<filtering>true</filtering>
				<includes>
					<include>需要进行预编译的资源文件名称如:a.properties</include>
				</includes>
			</resource>
			<resource>
				<directory>src/main/resources</directory>
				<!--filtering标签的值默认是false,在这里可写可不写-->
				<filtering>false</filtering>
				<excludes>
					<exclude>上面includes标签中的资源文件名称如:a.properties</exclude>
				</excludes>
			</resource>
</resources>

2.2 resources标签结合mybatis使用

如果想要将mapper.xml文件和mapper接口同一个包中,并且在项目打包的时候需要作为资源文件也要打包进去,比如项目的结构如下

在这里插入图片描述
可以在pom文件中进行如下配置

<build>
		<resources>
			<!--将src/main/java目录下的所有xml文件都作为项目的资源文件,
				项目打包的时候也会打包进去
			-->
			<resource>
				<directory>src/main/java</directory>
				<includes>
                    <include>**/*.xml</include>
                </includes>
			</resource>
			<!--将项目的src/main/resources目录下的所有文件都作为项目的资源文件
				项目打包的时候也会打包进去
			-->
			<resource>
				<directory>src/main/resources</directory>
			</resource>
		</resources>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
</build>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/493923.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

考研数学|张宇《1000题》太难了,根本刷不动?怎么破!

即使一直在看张宇的课程&#xff0c;但在做1000题时仍然感到困难。这其实是许多考生会出现的问题&#xff0c;所以不用担心&#xff0c;希望看完这篇文章能对你有帮助。 首先是理论与实践的差距。听课时&#xff0c;你可能是在接受知识&#xff0c;而做题则需要将这些知识应用…

鸿蒙开发之ArkUI组件常用组件文本输入

TextInput、TextArea是输入框组件&#xff0c;通常用于响应用户的输入操作&#xff0c;比如评论区的输入、聊天框的输入、表格的输入等&#xff0c;也可以结合其它组件构建功能页面&#xff0c;例如登录注册页面。 TextInput为单行输入框、TextArea为多行输入框 TextArea 多行…

阿里云服务器租用价格表(最新CPU/内存/带宽/磁盘收费标准)

阿里云服务器一个月多少钱&#xff1f;最便宜5元1个月。阿里云轻量应用服务器2核2G3M配置61元一年&#xff0c;折合5元一个月&#xff0c;2核4G服务器30元3个月&#xff0c;2核2G3M带宽服务器99元12个月&#xff0c;轻量应用服务器2核4G4M带宽165元12个月&#xff0c;4核16G服务…

如何用Python操作xlsx文件并绘制折线图!

​大家好&#xff0c;数据分析在现代社会越来越重要&#xff0c;而Excel作为数据分析的利器&#xff0c;几乎人手一份。但是&#xff0c;Excel的操作有时候略显繁琐&#xff0c;更是感觉无从下手。 你知道吗&#xff1f;Python这个神奇的工具不仅能帮你处理海量的数据&#xf…

【GPU系列】选择最适合的 CUDA 版本以提高系统性能

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

c语言中动态内存管理

说到内存&#xff0c;大家一定都知道。但是有一种函数可以实现动态内存管理&#xff0c;下面大家一起学习。 文章目录 一、为什么要有动态内存管理&#xff1f;二、malloc 和 free1.malloc2.free 三、calloc 和 realloc1.calloc2.realloc3.常见的动态内存的错误3.1对NULL指针的…

【SpringBoot框架篇】37.使用gRPC实现远程服务调用

文章目录 RPC简介gPRC简介protobuf1.文件编写规范2.字段类型3.定义服务(Services) 在Spring Boot中使用grpc1.父工程pom配置2.grpc-api模块2.1.pom配置2.2.proto文件编写2.3.把proto文件编译成class文件 3.grpc-server模块3.1.pom文件和application.yaml3.2.实现grpc-api模块的…

Linux——信号概念与信号产生方式

目录 一、概念 二、前台进程与后台进程 1.ctrlc 2.ctrlz 三、信号的产生方式 1.键盘输入产生信号 2.系统调用发送信号 2.1 kill()函数 2.2 raise()函数 2.3 abort()函数 3.异常导致信号产生 3.1 除0异常 3.2 段错误异常 4.软件条件产生信号 4.1 管道 4.2 闹钟…

最新可用免费VPS云服务器整理汇总

随着云计算技术的不断发展&#xff0c;越来越多的个人和企业开始关注和使用VPS云服务器。VPS云服务器以其高度的灵活性、可定制性和安全性&#xff0c;成为了一种受欢迎的服务器解决方案。然而&#xff0c;对于初学者或者预算有限的用户来说&#xff0c;如何选择合适的免费VPS云…

ZYNQ学习之Ubuntu系统的简单设置与文本编辑

基本都是摘抄正点原子的文章&#xff1a;<领航者 ZYNQ 之嵌入式Linux 开发指南 V3.2.pdf&#xff0c;因初次学习&#xff0c;仅作学习摘录之用&#xff0c;有不懂之处后续会继续更新~ 一、Ubuntu的简单操作 1.1 切换拼音输入法 Ubuntu 自带的拼音输入法&#xff0c;有两种…

ADAS多传感器后融合算法解析-下篇

ADAS多传感器后融合算法解析-下篇 在ADAS多传感器后融合(上)中我们介绍了后融合的接口、策略。本文将主要介绍后融合的实现流程、难点及注意事项。 附赠自动驾驶学习资料和量产经验&#xff1a;链接 二、后融合处理流程 如下图为基本RC后融合系统流程图&#xff0c;接下来将…

day 36 贪心算法 part05● 435. 无重叠区间 ● 763.划分字母区间 ● 56. 合并区间

一遍过。首先把区间按左端点排序&#xff0c;然后右端点有两种情况。 假设是a区间&#xff0c;b区间。。。这样排列的顺序&#xff0c;那么 假设a[1]>b[0],如果a[1]>b[1]&#xff0c;就应该以b[1]为准&#xff0c;否则以a[1]为准。 class Solution { public:static bo…

argocd部署

一、前言 ArgoCD 是一个开源的、持续交付工具&#xff0c;用于自动化部署应用程序到 Kubernetes 集群。它基于 GitOps 理念&#xff0c;通过使用 Git 作为单一的源头来管理应用程序的配置和部署状态&#xff0c;argocd会定时监控git仓库中的yaml配置文件&#xff0c;当git仓库中…

验证码/数组元素的复制.java

1&#xff0c;验证码 题目&#xff1a;定义方法实现随机产生一个5位的验证码&#xff0c;前面四位是大写或小写的英文字母&#xff0c;最后一位是数字 分析&#xff1a;定义一个包含所有大小写字母的数组&#xff0c;然后对数组随机抽取4个索引&#xff0c;将索引对应的字符拼…

JSON Web Token 入门教程

JSON Web Token&#xff08;JWT&#xff09;是一种可以在多方之间安全共享数据的开放标准&#xff0c;JWT 数据经过编码和数字签名生成&#xff0c;可以确保其真实性&#xff0c;也因此 JWT 通常用于身份认证。这篇文章会介绍什么是 JWT&#xff0c;JWT 的应用场景以及组成结构…

46秒AI生成真人视频爆火,遭在线打假「换口型、声音」

ChatGPT狂飙160天&#xff0c;世界已经不是之前的样子。 新建了人工智能中文站https://ai.weoknow.com 每天给大家更新可用的国内可用chatGPT资源 发布在https://it.weoknow.com 更多资源欢迎关注 是炒作还是真正的 AI 视频能力进化&#xff1f; AI 生成视频已经发展到这个程…

rabbitmq集群问题排查

blowcode-test-redis04、blowcode-test-redis05、blowcode-test-redis06 这3个节点搭建的rabbitmq集群&#xff0c;04是主节点。 某次分别观察3个节点的管理页面&#xff0c;先都只能看到自己的节点是正常的绿色状态&#xff0c;猜测节点都各自为政了。 下图是05节点成功加入0…

iOS_convert point or rect 坐标和布局转换+判断

文章目录 1. 坐标转换2. 布局转换3. 包含、相交 如&#xff1a;有3个色块 let view1 UIView(frame: CGRect(x: 100.0, y: 100.0, width: 300.0, height: 300.0)) view1.backgroundColor UIColor.cyan self.view.addSubview(view1)let view2 UIView(frame: CGRect(x: 50.0, …

Redis面试题-缓存穿透,缓存击穿,缓存雪崩

1、穿透: 两边都不存在&#xff08;皇帝的新装&#xff09; &#xff08;黑名单&#xff09; &#xff08;布隆过滤器&#xff09; 解释&#xff1a;请求的数据既不在Redis中也不在数据库中&#xff0c;这时我们创建一个黑名单来存储该数据&#xff0c;下次再有类似的请求进来…

TikTok养号保姆式操作攻略

TikTok养号的重要性不必多少&#xff0c;不仅可以在创号初期保障账号安全&#xff0c;后期的账号流量也需要以前期养好账号为前提。下面就给大家分享如何养号的真实操作攻略&#xff01; 一、为什么要养号 &#xff08;1&#xff09;提高系统推荐精准度 系统不了解新账户人设…