Maven 核心插件 maven-resources-plugin 使用详解

Maven 核心插件 maven-resources-plugin 负责处理项目中的资源文件。它的主要功能是将资源从源目录(如 src/main/resources)复制到目标目录(如 target/classes),并在此过程中进行必要的过滤和替换操作,如替换占位符变量。这个插件通常在 Maven 构建生命周期的 process-resources 和 process-test-resources 阶段被执行,用于处理主资源和测试资源。


文章目录

      • 1、maven-resources-plugin 插件介绍
      • 2、`resources:resources` 插件目标
        • 2.1、必选参数 `` 元素
        • 2.2、可选参数`` 元素
        • 2.3、可选参数`` 元素
        • 2.4、可选参数`` 元素
        • 2.4、可选参数`` 元素
        • 2.5、可选参数`` 元素
        • 2.6、可选参数`` 元素
        • 2.7、可选参数`` 元素
        • 2.8、可选参数 `` 元素
        • 2.9、可选参数 `` 元素
        • 2.10、可选参数 `` 元素
        • 2.11、可选参数 `` 元素
        • 2.12、可选参数 `` 元素
        • 2.13、可选参数 `` 元素
        • 2.14、可选参数 `` 元素
        • 2.15、可选参数 `` 元素
        • 2.16、可选参数 `` 元素
      • 3、`resources:testResources ` 插件目标
      • 4、`resources:copy-resources` 插件目标


1、maven-resources-plugin 插件介绍

资源插件负责将项目资源到输出目录。Maven 项目有两种不同的资源:主资源和测试资源。区别在于,主资源(默认在 src/main/resources 目录)是与主源代码(位于 src/main/java 目录下)关联的资源,而测试资源(默认在 src/test/resources 目录)与测试源代码(位于 src/main/test 目录下)关联。从 2.3 版本开始,该插件可以使用 Maven 过滤组件来过滤资源。

资源插件将 resource 元素所指定的文件复制到输出目录。

以下三个插件目标仅在指定资源和输出目录的 XML 元素的方式上有所不同。

  • resources:resources:将主资源目录 src/main/resources 中的资源复制到构建输出目录 target/classes,并支持过滤;

  • resources:testResources:将测试资源目录 src/test/resources 中的资源复制到构建输出目录 target/test-classes,并支持过滤;

  • resources:copy-resources:允许从任意指定的源目录复制资源到任意指定的目标目录,提供更大的灵活性并支持过滤。


2、resources:resources 插件目标

该插件目标的全称为 org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources,主要负责将主源代码的资源复制到主输出目录。该目标通常自动执行,因为它默认绑定到 process-resources 生命周期阶段。它始终使用project.build.resources 元素来指定资源,默认情况下使用 project.build.outputDirectory property 来指定输出目录。

2.1、必选参数 <outputDirectory/> 元素

将资源复制到其中的输出目录。默认的值为 ${project.build.outputDirectory}target/classes (Maven 项目的默认输出目录路径,用于存放编译后的类文件和主资源文件)

2.2、可选参数<delimiters/> 元素

指定在资源中进行筛选的表达式的分隔符。这些分隔符以 beginToken*endToken 的形式指定。如果未给出 *,则假定起始和结束的分隔符相同。因此,可以将默认筛选分隔符指定为:

<delimiters><delimiter>${*}</delimiter><delimiter>@</delimiter>
</delimiters>

当分隔符两端相同(如 @),无需指定 @*@。这表示起始和结束标记相同,简化了配置。

PS:筛选机制允许你在资源文件中使用占位符,并在构建过程中用实际的值替换这些占位符。占位符的分隔符决定了哪些文本会被识别为占位符。

另外使用 <delimiters/> 生效需要确保启用了筛选功能:在资源配置中,确保 filtering 属性设置为 true

        <resources><resource><directory>src/main/resources</directory><includes><include>**/*</include></includes><!-- 启用筛选功能 --><filtering>true</filtering> </resource></resources>

假设你的资源文件 config.properties 中有以下内容:

app.version=${project.version}
app.name=@project.name@

在构建过程中,Maven 会根据分隔符替换这些占位符:

  • ${project.version}:将被替换为 pom.xml 中定义的 ${project.version} 的值;
  • @project.name@:将被替换为 pom.xml 中定义的 ${project.name} 的值。
2.3、可选参数<outputDirectory/> 元素

除了自定义分隔符(如果有)之外,还使用默认分隔符。默认为 true

2.4、可选参数<encoding/> 元素

读取和写入筛选资源时要使用的字符编码。默认的值使用 ${project.build.sourceEncoding} ,通常在 pom.xml 中定义该属性,以确保一致的字符编码。

2.4、可选参数<escapeString/> 元素

指定一个转义字符串,以防止某些表达式被替换。带有此转义字符串的表达式在处理资源文件时不会被替换,而是保持原样或进行特定的转义处理。

2.5、可选参数<escapeWindowsPaths/> 元素

用于指定是否在 Windows 样式路径中转义反斜杠和冒号。这个设置可以在某些情况下避免路径解析错误,特别是当路径中包含特殊字符时。

默认情况下,<escapeWindowsPaths/> 的值为 true,表示会自动进行转义。例如,路径 C:\Users\Example\ 会被转义为 C:\\Users\\Example\\

2.6、可选参数<fileNameFiltering/> 元素

用于支持过滤特定的文件名、文件夹或路径,这对于精细化控制清理操作非常有用。通过此参数,可以指定需要排除或包含的文件和目录,从而实现更加灵活的清理策略。

2.7、可选参数<filters/> 元素

要与 POM build/filters 部分中指定的系统属性、项目属性和过滤器属性一起使用的额外属性文件列表,这些文件应在当前 Mojo 执行期间用于过滤。通常,这些将在插件的 execution 部分进行配置,从而为特定 execution 提供一组不同的过滤器。例如,

从 Maven 2.2.0 开始,您可以选择使用 default-resourcesdefault-testResources 来为两种不同类型的资源提供不同的配置。通过提供 extraFilters 配置,您可以区分哪些筛选器用于哪种类型的资源。

2.8、可选参数 <includeEmptyDirs/> 元素

复制 resources 元素中包含的任何空目录。默认为 false

2.9、可选参数 <mavenFilteringHints/> 元素

<mavenFilteringHints/> 元素用于配置一组 Plexus 组件,这些组件实现了 MavenResourcesFiltering.filterResources() 方法,并将在资源复制/筛选后执行。该元素的值类型为 java.util.List,允许用户指定多个组件提示。

这些组件提示列表可以用来扩展或自定义资源的过滤和处理过程。通过配置 <mavenFilteringHints/> 元素,可以在资源过滤后执行一系列特定操作,例如日志记录、资源校验、额外的处理逻辑等。

以下是一个示例配置,展示了如何使用 <mavenFilteringHints/> 元素:

<build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-resources-plugin</artifactId><version>3.2.0</version><configuration><mavenFilteringHints><hint>com.example.maven.filtering.MyCustomFilter1</hint><hint>com.example.maven.filtering.MyCustomFilter2</hint></mavenFilteringHints></configuration></plugin></plugins>
</build>

在这个示例中,<mavenFilteringHints/> 元素配置了两个自定义的过滤组件 MyCustomFilter1MyCustomFilter2。这些组件将在资源复制和筛选之后执行,执行具体的过滤或处理逻辑。

2.10、可选参数 <nonFilteredFileExtensions/> 元素

<nonFilteredFileExtensions/> 元素用于指定在资源过滤过程中不进行过滤的文件扩展名列表。这个列表中的文件扩展名将被排除在过滤操作之外,以确保这些文件在复制过程中保持原样,不受过滤规则的影响。默认情况下,这些扩展名包括:jpgjpeggifbmppng。该元素的值类型为 java.util.List

通过配置 <nonFilteredFileExtensions/>,可以添加或修改不进行过滤的文件扩展名列表,以适应项目的特定需求。

2.11、可选参数 <overwrite/> 元素

覆盖现有文件,即使目标文件较新。默认为 false

2.12、可选参数 <propertiesEncoding/> 元素

<propertiesEncoding/> 元素用于指定在读取和写入过滤属性文件时要使用的字符编码。这个参数非常重要,尤其在处理包含特殊字符或多语言内容的属性文件时,可以确保正确的字符编码被使用。如果未指定该参数,它将默认使用 encoding 参数的值。

通过设置 <propertiesEncoding/>,可以明确控制属性文件的编码方式,从而避免因为编码问题导致的文件读取或写入错误

2.13、可选参数 <skip/> 元素

如果需要,可以跳过插件的执行。不推荐使用,但有时使用起来相当方便。默认为 false

2.14、可选参数 <supportMultiLineFiltering/> 元素

用于控制在过滤过程中是否支持多行过滤。具体来说,当启用此功能时,Maven 将停止在行末尾搜索 endToken,而是继续跨行搜索,直到找到匹配的 endToken。该参数默认为 false,表示默认情况下不支持多行过滤,即只在当前行内搜索 endToken

2.15、可选参数 <useBuildFilters/> 元素

如果为 false,则在处理此 Mojo 执行中的资源时,不要使用 POM 的 build/filters 部分中指定的过滤器。默认为 true

2.16、可选参数 <useDefaultDelimiters/> 元素

除了自定义分隔符(如果有)之外,还使用默认分隔符。默认为 true


3、resources:testResources 插件目标

该插件目标的全称为 org.apache.maven.plugins:maven-resources-plugin:3.2.0:test-Resources,主要负责将测试源代码的资源复制到测试输出目录。该插件目标通常自动执行,因为默认情况下它与 process-test-resources 生命周期阶段相关联。它总是使用 project.build.testResources 元素指定资源,默认情况下使用 project.build.testOutputDirectory property 指定要输出的目录。

该插件目标支持的可选元素与 resources:resources 插件目标支持的可选元素相同。


4、resources:copy-resources 插件目标

该插件目标的全称为 org.apache.maven.plugins:maven-resources-plugin:3.2.0:copy-resources,主要负责将资源复制到输出目录。此目标要求您配置要复制的资源,并指定输出目录。

必选元素:

  • <outputDirectory>。要将资源复制到其中的输出目录。
  • <resources>。要转移的资源列表。

可选参数:该插件目标支持的可选元素与 resources:resources 插件目标支持的可选元素相同。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PCL 低阶多项式求解

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 这里使用C++实现对二阶和三阶多项式的求解过程(求解多项式的根),其推导过程网上有很多,这里就不多叙述了。 二、实现代码 RootsPolynomial.h #pragma once#include <algorithm> #include <cstdint>…

LeetCode题解:2303. 计算应缴税款总额,JavaScript,详细注释

原题链接&#xff1a; https://leetcode.cn/problems/calculate-amount-paid-in-taxes/ 解题思路&#xff1a; 该题的目标是把收入分层几个区间&#xff0c;每个区间内部的金额单独计算纳税额以[[3,50],[7,10],[12,25]]为例&#xff0c;该题要计算的分别是&#xff1a; [0, 3…

MATLAB神经网络---regressionLayer回归输出层

回归输出层regressionLayer 回归层计算回归任务的半均方误差损失。 Matlab中的regressionLayer函数是一个深度学习工具箱中的函数,用于定义回归问题的损失函数层。它可用于神经网络模型的最后一层&#xff0c;将预测值与目标值进行比较,并计算出损失值。 语法 layer regre…

WPF学习(3)--不同类通过接口实现同种方法

一、接口概述 1.接口的概念 在C#中&#xff0c;接口&#xff08;interface&#xff09;是一种引用类型&#xff0c;它定义了一组方法、属性、事件或索引器&#xff0c;但不提供实现。接口只定义成员的签名&#xff0c;而具体的实现由实现接口的类或结构体提供。接口使用关键字…

MySQL备份与恢复:确保数据的安全与可靠性

引言: 数据的安全性和可靠性的重要性 在现代企业和组织中,数据已经成为了最重要的资产之一。数据的安全性和可靠性对于企业的运营至关重要。首先,数据的安全性保证了敏感信息不会落入错误的手中,防止了潜在的经济损失和法律风险。其次,数据的可靠性则确保了企业能够准确…

AI学习指南机器学习篇-支持向量机超参数调优

AI学习指南机器学习篇-支持向量机超参数调优 在机器学习领域中&#xff0c;支持向量机&#xff08;Support Vector Machines&#xff0c;SVM&#xff09;是一种非常常用的监督学习模型。它通过寻找一个最优的超平面来进行分类和回归任务。然而&#xff0c;在实际应用中&#x…

数据赋能(118)——体系:数据收集——技术方法、主要工具

技术方法 数据收集的技术方法多种多样&#xff0c;以下是一些主要的技术手段&#xff1a; 网络爬虫&#xff1a;这是一种自动化程序&#xff0c;能够遍历互联网上的网页并提取所需信息。网络爬虫可以有效地收集大规模的结构化和非结构化数据&#xff0c;为后续的数据分析和挖…

【Go】使用Go语言实现AES CBC No Padding加密和解密

冷雨悄悄停吧 天真的心因为你 那管多风雨天仍和你一起 告诉你我其实多么的想你 其实我我真的爱着你 &#x1f3b5; 蒋明周《真的爱着你》 引言 高级加密标准&#xff08;AES&#xff09;是一种广泛使用的加密算法。它可以工作在多种模式下&#xff0c;最…

Cesium4Unreal - # 009 直接加载显示shapefile

文章目录 直接加载显示shapefile1 思路2 步骤2.1 下载shapelib2.2 添加依赖模块2.3 创建Actor2.3.1 MyShapeLoaderActor.h2.3.2 MyShapeLoaderActor.cpp2.3 蓝图代码直接加载显示shapefile 1 思路 在Unreal Engine中加载显示shapefile无非就是从shapefile中读取几何数据,并且…

【车载音视频电脑】嵌入式AI分析车载DVR,支持8路1080P

产品特点 采用H.265 & H.264编解码&#xff0c;节约存储空间、传输流量&#xff1b; 高分辨率&#xff1a;支持8路1080P*15FPS/4路1080P*30FPS、720P、D1等编解码&#xff1b; 支持1张SATA硬盘&#xff0c;取用方便&#xff0c;满足大容量存储要求&#xff1b; 支持1个…

ChatGPT中文镜像网站分享

ChatGPT 是什么&#xff1f; ChatGPT 是 OpenAI 开发的一款基于生成预训练变换器&#xff08;GPT&#xff09;架构的大型语言模型。主要通过机器学习生成文本&#xff0c;能够执行包括问答、文章撰写、翻译等多种文本生成任务。截至 2023 年初&#xff0c;ChatGPT 的月活跃用户…

神经网络介绍及教程案例

神经网络介绍及教程&案例 神经网络&#xff08;Neural Networks&#xff09;是机器学习和人工智能中的一种关键技术&#xff0c;模仿了人类大脑的工作方式&#xff0c;能够处理复杂的数据和任务。以下是神经网络的一些基础介绍&#xff1a; 基本概念 神经元&#xff08;N…

12.实战私有数据微调ChatGLM3

实战私有数据微调ChatGLM3 实战私有数据微调ChatGLM3实战构造私有的微调数据集基于 ChatGPT 设计生成训练数据的 Prompt使用 LangChain GPT-3.5-Turbo 生成训练数据样例训练数据解析、数据增强和持久化存储自动化批量生成训练数据集流水线提示工程&#xff08;Prompt Engineer…

OpenCV读取图片

import cv2 as cv # 读取图像 image cv.imread(F:\\mytupian\\xihuduanqiao.jpg) # 创建窗口 cv.namedWindow(image, cv.WINDOW_NORMAL) #显示图像后&#xff0c;允许用户随意调整窗口大小 # 显示图像 cv.imshow(image, image) cv.waitKey(0)import cv2 as cv srccv.imread(…

Java常用的设计模式,如单例模式、工厂模式、观察者模式等

设计模式是软件工程中的一种解决方案&#xff0c;用于应对常见的设计问题和挑战。它们提供了一种标准化的方式来解决设计难题&#xff0c;使代码更加灵活、可扩展和易于维护。 单例模式&#xff08;Singleton Pattern&#xff09; 概述 单例模式确保一个类只有一个实例&…

代码随想录算法训练营第37天 [ 435. 无重叠区间 763.划分字母区间 56. 合并区间 738.单调递增的数字 ]

代码随想录算法训练营第37天 [ 435. 无重叠区间 763.划分字母区间 56. 合并区间 738.单调递增的数字 ] 一、435. 无重叠区间 链接: 代码随想录. 思路&#xff1a;更新区间的值 做题状态&#xff1a;看解析后做出来了 class Solution { public:static bool cmp(vector<int>…

Java——LinkedList

1、链表 1.1 链表的概念及结构 链表在逻辑层面上是连续的&#xff0c;在物理层面上不一定是连续的 链表结构可分为&#xff0c;单向或双向、带头或不带头、循环或非循环&#xff0c;组合共计8种 重点&#xff1a;无头单向非循环链表、无头双向链表 1.2 模拟实现无头单向非…

拥抱开源,构建未来:王嘉树与 TDengine 的开源之旅

在当代的技术浪潮中&#xff0c;开源文化不仅催生了无数创新技术&#xff0c;也为广大技术爱好者提供了一个展示才华、相互学习的平台。我们今天采访到的这位北京邮电大学电子工程学院的研究生&#xff0c;就是在这样的背景下&#xff0c;通过开源活动不断探索、学习并实现自我…

数据分析常用6种分析思路(下)

作为一名数据分析师&#xff0c;你又没有发现&#xff0c;自己经常碰到一些棘手的问题就没有思路&#xff0c;甚至怀疑自己究竟有没有好好学过分析&#xff1f; 在上篇文章里&#xff0c;我们讲到了数据分析中的流程、分类、对比三大块&#xff0c;今天&#xff0c;我们继续讲…

【ElasticSearch】windows server 2019安装ES8.9.1 + kibana8.9.1 + IK分词器

目录 准备工作 ES Kibana IK 安装 es es访问测试 将es安装为系统服务 Kibana 配置es 运行kibana 访问测试 IK 补充 准备工作 ES8.9.1 kibana8.9.1 IK的版本最好要对应上&#xff01;&#xff01;&#xff01; ES es8.9.1&#xff1a; https://artifa…