Maven resrouce下filtering作用说明

一、简介

在此之前,我们首先要明确filtering的概念。

定义

filtering是maven的resource插件中提供的一个功能。

决定是否将resources目录下的文件中的tokens(即通过@val@标识的变量)进行参数替换。

这里的参数主要有两个来源,一个是来自于pom文件中的properties属性,一个是来源于外部的.properties文件(个人认为这个文件不可与springboot中的配置文件混为一谈)。

解决的问题

想要解决编码过程中的配置文件的变量注入的问题,如:在不同的开发环境下要启用不同的配置属性,如何灵活的切换?filtering为我们提供了方法。

用法

首先通过上面的例子启动,之后,就可以在pom文件中定义属性,并在resources目录下的配置文件,如application.yml中使用了,具体使用方法见下文详述。

二、使用说明

1. 引入pom和resource 资源文件的变量预编译配置

示例代码如下,就是对resources目录开启了filtering过滤,不添加filtering ,默认认值为false。

<build>

        <resources>

            <resource>

                <directory>src/main/resources</directory>

                <filtering>true</filtering>

            </resource>

        </resources>

</build>

了更深入的了解这个filtering,详解如下。

1.1 pom文件 读取pom文件内部的变量

在pom文件内部对变量的应用,都通过 valuename 的方式。

常见的使用方式如下

  • {value_name}
  • valuen​ame
  • {project.artifactId}
1.2 application.yml 文件读取application.yml 文件内部的变量方式

在application.yml中对内部变量的引用,通常也是使用${value_name}的方式,比如常见的:${server.port}

这样就导致了一个冲突,两种配置文件都用同一套标识符,那yaml文件怎么引入pom中的变量呢,于是就有了resource.delimiter这个属性

1.3 yaml文件读取pom文件的变量方式

如果查看spring-boot-starter-parent中的属性栏,就可以看到赫然写着:

<resource.delimiter>@</resource.delimiter>

在yaml中如果要引用pom中的属性,直接使用@标识符就行了,用法为@value_of_pom@。

就这样,所以就出现了第三种变量的引用方式:

  • 在resources的yaml文件中引用pom中的变量时,通过@value_of_pom@进行引用(前提是开启了资源的过滤filtering)。
1.4 pom文件读取 .properties文件的变量

在Maven项目的pom.xml中,你可以使用元素来定义变量,并使用来指定资源文件的位置。如果你想要在pom.xml中读取.properties文件中的变量,可以使用Maven的filtering功能。

以下是一个简单的例子:

在src/main/resources目录下创建一个.properties文件,比如config.properties。src/main/resources/config.properties

database.url=jdbc:mysql://localhost/mydb

database.user=myuser

database.password=mypassword

在pom.xml中配置资源过滤和元素。

<project>

    ...

    <properties>

        <database.url>${database.url}</database.url>

        <database.user>${database.user}</database.user>

        <database.password>${database.password}</database.password>

    </properties>

    <build>

        <resources>

            <resource>

                <directory>src/main/resources</directory>

                <filtering>true</filtering>

            </resource>

        </resources>

    </build>

    ...

</project>

2. 开启resource 打包资源文件的过滤

通过includes和 excludes 标签进行打包资源文件的过滤

<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>

3. maven命令参数

主要用于切换环境的:

//这表示给pom中的file变量赋值为了my-setting-file,如果这个是设定的filter的文件名,即会引入my-setting-file中的设定参数。

mvn resources:resources -Dfile=my-setting-file



//这表示启用test,jdk8两个profile,不激活os-windows。

mvn clean package -Ptest,jdk8,!os-windows

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

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

相关文章

国标GB28181公网直播EasyGBS国标GB28181软件的应用场景

随着科技的飞速发展&#xff0c;安防视频监控技术已经成为现代社会不可或缺的一部分&#xff0c;它在保障公共安全、企业运营安全以及个人财产安全方面发挥着举足轻重的作用。国标GB28181网页直播平台EasyGBS安防视频监控平台&#xff0c;作为集高效性、稳定性与智能化于一体的…

【Vue项目1】第一篇

Vue项目1学习第一篇 01. 环境配置介绍和项目搭建02. Router路由配置引入03. ElementPlus引入和按需加载04. layout布局和菜单aside组件创建05. aside样式问题和treeMenu组件拆分06. treeMenu组件递归实现 01. 环境配置介绍和项目搭建 &#xff08;1&#xff09;安装node.js …

【从零开始的LeetCode-算法】3127. 构造相同颜色的正方形

给你一个二维 3 x 3 的矩阵 grid &#xff0c;每个格子都是一个字符&#xff0c;要么是 B &#xff0c;要么是 W 。字符 W 表示白色&#xff0c;字符 B 表示黑色。 你的任务是改变 至多一个 格子的颜色&#xff0c;使得矩阵中存在一个 2 x 2 颜色完全相同的正方形。 如果可以…

Javaweb梳理8——数据库设计

Javaweb梳理8——数据库设计 8 数据库设计8.1 数据库设计简介8.2 表关系(一对多)8.3 表关系&#xff08;多对多&#xff09;8.4 表关系&#xff08;一对一&#xff09; 8 数据库设计 8.1 数据库设计简介 软件的研发步骤 数据库设计概念 数据库设计就是根据业务系统的具体需…

Edge 浏览器插件开发:图片切割插件

Edge 浏览器插件开发&#xff1a;图片切割插件 在图片处理领域&#xff0c;按比例切割图片是一个常见需求。本文将带你开发一个 Edge 浏览器插件&#xff0c;用于将用户上传的图片分割成 4 个部分并自动下载到本地。同时&#xff0c;本文介绍如何使用 cursor 辅助工具来更高效…

QT QPainter 绘图

QT QPainter 绘图 一、基本绘图类&#xff1a; Qt 中提供了强大的 2D 绘图系统&#xff0c;可以使用相同的 API 在屏幕和绘图设备上进行绘制&#xff0c;它主要基于QPainter、QPaintDevice 和 QPaintEngine 这三个类。 QPainter 用于执行绘图操作&#xff0c;其提供的 API 在…

【C++】位图详解(一文彻底搞懂位图的使用方法与底层原理)

目录 1.位图的概念 2.位图的使用方法 定义与创建 设置和清除 位访问和检查 转换为其他格式 3.位图的使用场景 1.快速的查找某个数据是否在一个集合中 2.排序去重 3.求两个集合的交集和并集 4.位图的底层实现 私有成员定义与初始化 set和reset的实现 前面的博客我们…

在线教育系统源码开发详解:网校培训平台搭建的核心技术

本篇文章&#xff0c;笔者将详细介绍在线教育系统源码的开发过程&#xff0c;重点聚焦网校培训平台搭建的核心技术&#xff0c;以期为有意从事在线教育行业的开发者提供实用的参考。 一、在线教育系统的构成 前端负责用户的交互体验&#xff0c;后端处理业务逻辑&#xff0c;…

qt QPalette详解

1、概述 QPalette是Qt框架中用于管理颜色组和角色的一种机制。它允许开发者为应用程序中的不同组件&#xff08;如窗口、按钮、文本框等&#xff09;定义一套统一的颜色方案。QPalette通过定义颜色角色&#xff08;如背景色、前景色、选择色等&#xff09;和颜色组&#xff08…

Java基本语法和基础数据类型——针对实习面试

目录 Java基本语法和基础数据类型标识符和关键字有什么区别&#xff1f;Java关键字有哪些&#xff1f;Java基本数据类型有哪些&#xff1f;什么是自动装箱和拆箱&#xff1f;自动装箱&#xff08;Autoboxing&#xff09;自动拆箱&#xff08;Unboxing&#xff09; 自动装箱和拆…

逻辑磁盘管理 附实验:逻辑卷的组成与划分

分区类型&#xff1a; 1、系统引导分区 就是存放系统的引导文件和Linux的内核文件 2、swap分区 交换分区&#xff0c;系统的物理内存不足时&#xff0c;从一些长时间未运行的程序当中释放一部分内存释放出来的保存到swap分区&#xff0c;这些未运行的程序一旦运行还要从swap空…

fetch: 取消请求、读取流、获取下载进度...

引言 Fetch API 提供了一个获取资源的接口(包括跨网络通信)。对于任何使用过 XMLHttpRequest 的开发者来说, 对于 Fetch 应该都能轻松上手, 而且新的 API 提供了更强大和灵活的功能集… 本文主要就是记录下, 在使用 Fetch 期间可能会碰到的几个小案例… 一、取消请求 在前端…

【 纷享销客-注册安全分析报告-无验证方式导致安全隐患】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 1. 暴力破解密码&#xff0c;造成用户信息泄露 2. 短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉 3. 带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造…

mobaxterm 中文输入问号解决办法

无论是终端&#xff0c;还是session的name&#xff0c;输入中文都是问号&#xff0c;那么使用以下方法可解决问题 语言设置中找到英文键盘删除即可

Hive的数据存储格式

目录 一、前言 二、存储格式 2.1、文本格式&#xff08;TextFile&#xff09; 2.1.1、定义与特点 2.1.2、存储与压缩 2. 1.3、使用场景 2.2、行列式文件&#xff08;ORCFile&#xff09; 2.2.1、ORC的结构 2.2.2、ORC的数据类型 2.2.3、ORC的压缩格式 2.2.3、ORC存储…

Spring Boot的核心优势及其应用详解

目录 前言1. Spring Boot的核心优势1.1 启动依赖的集成1.2 自动化配置 2. 内嵌服务器支持2.1 内嵌Tomcat服务器2.2 独立运行与便捷部署 3. 外部配置管理3.1 多环境支持3.2 配置优先级与外部化配置 4. Spring Boot的应用场景4.1 微服务架构4.2 云原生应用 结语 前言 在现代的Ja…

scala---10.30

val、var package com_1030class Person {var name:String"rose"def sum(n1:Int,n2:Int):Int{n1n2} } object Person{def main(args: Array[String]): Unit {//创建person对象var personnew Person()println(person.sum(10,20))//30println(person.name)person.nam…

ubuntu22.04 docker-compose搭建apisix高可用

首先你得先确保每台主机安装了docker和docker-compose 3台主机 没有安装docker和docker-compose的可以看我前两篇博客 可以先克隆仓库 git clone https://github.com/apache/apisix-docker.git 进入example目录 拷贝dashboard配置文件 将all-in-one中apisix-dashboard文件夹拷…

北大计算机考研难度如何?毕业后就业情况怎么样?

C哥专业提供——计软考研院校选择分析专业课备考指南规划 一、总体情况概述 北京大学计算机 2024 届考研整体呈现 “稳中有升” 的态势。在复试分数线方面&#xff0c;无论是学硕&#xff08;本部&#xff09;还是专硕&#xff08;深圳&#xff09;&#xff0c;较 2023 届均有…

黑马JavaWeb-day04

文章目录 mavenmaven 简介maven 安装IDEA集成maven创建maven项目Maven 坐标依赖管理单元测试 Web入门Springboot 入门HTTP协议三层架构分层解耦 I O C & D I IOC\&DI IOC&DI入门 I O C IOC IOC和 D I DI DI详解 maven maven 简介 maven: M a v e n Maven Maven是…