当前位置: 首页 > news >正文

Maven resources资源配置详解

Maven 资源配置详解

一、配置说明

在 Maven 中,资源文件(如配置文件、属性文件等)通过 <resources> 配置管理,主要控制:

  1. 资源目录位置
  2. 文件过滤(变量替换)
  3. 包含/排除规则
  4. 多模块优先级

二、基础配置样例
<build><resources><!-- 主资源目录配置 --><resource><directory>src/main/resources</directory> <!-- 资源路径 --><filtering>true</filtering>              <!-- 启用变量替换 --><includes>                               <!-- 包含规则 --><include>**/*.properties</include><include>config/*.xml</include></includes><excludes>                              <!-- 排除规则 --><exclude>**/test.*</exclude></excludes></resource><!-- 添加额外资源目录 --><resource><directory>src/main/config</directory><filtering>false</filtering></resource></resources><!-- 测试资源独立配置 --><testResources><testResource><directory>src/test/resources</directory></testResource></testResources>
</build>

三、多项目配置规则与优先级
1. 父子模块配置原则
配置位置生效范围优先级
父 POM所有子模块(默认继承)
子模块 POM仅当前模块
子模块显式配置覆盖父 POM 配置最高
2. 覆盖规则示例

父 POM:

<resources><resource><directory>parent-resources</directory></resource>
</resources>

子模块 POM (覆盖父配置):

<resources><!-- 父配置被完全覆盖,仅当前配置生效 --><resource><directory>child-resources</directory></resource>
</resources>

子模块合并配置 (显式包含父资源):

<resources><!-- 手动包含父资源目录 --><resource><directory>../parent-resources</directory></resource><!-- 子模块自有资源 --><resource><directory>child-resources</directory></resource>
</resources>

四、生效规则详解
1. 目录生效顺序
配置的第一个 resource
第二个 resource
...
  • 文件覆盖:同名文件按配置顺序,后处理的覆盖先处理的
  • 目录独立:不同目录的文件会合并到输出目录
2. 过滤规则(filtering)
  • 开启过滤 (<filtering>true</filtering>):
    • 替换资源文件中的 ${property} 占位符
    • 属性来源:pom.xml 属性、settings.xml、系统属性、外部属性文件
  • 过滤作用域:仅对当前 <resource> 生效
3. 包含/排除规则
  • 规则使用 Ant 风格路径匹配
  • 执行顺序
    1. 应用 includes → 2. 应用 excludes
  • 默认行为
    • 未配置 <includes>:包含目录所有文件
    • 未配置 <excludes>:不排除任何文件
4. 多模块优先级总结
  1. 子模块 POM 配置 > 父 POM 配置
  2. 同模块内按 <resource> 顺序处理
  3. 依赖传递的资源 不会自动合并(需用 Assembly 插件)

五、最佳实践
  1. 统一父 POM 配置
    公共资源在父 POM 定义,子模块按需覆盖

    <!-- 父 POM 定义模板 -->
    <resources><resource><directory>${project.basedir}/src/main/resources</directory><includes><include>**/*.tpl</include></includes></resource>
    </resources>
    
  2. 敏感信息过滤
    结合 Maven Profiles 动态切换环境配置:

    <profile><id>prod</id><build><resources><resource><directory>src/main/resources-prod</directory><filtering>true</filtering></resource></resources></build>
    </profile>
    
  3. 冲突解决
    同名文件按资源目录声明顺序覆盖:

    <!-- 优先使用 env 目录文件 -->
    <resource><directory>src/main/resources-env</directory>
    </resource>
    <resource><directory>src/main/resources</directory>
    </resource>
    

⚠️ 注意:默认资源目录 src/main/resources 一旦自定义配置,需显式声明才能生效!

六、配置样例

pom.xml 中配置

            <!-- 配置 resource 后,会覆盖默认配置,必须显示配置 --><resource><!-- includes 不设置,默认目录下所有文件, 默认 filtering 为 false --><directory>src/main/resources</directory> <!-- 你的源目录 --><!--<includes>&lt;!&ndash;<include>**/*.properties</include> &lt;!&ndash; 包含的文件类型 &ndash;&gt;<include>**/*.xml</include>&ndash;&gt;<include>**/*.*</include></includes>--><!--<targetPath>${project.build.directory}/classes</targetPath>--> <!-- 默认目录 --><!--<filtering>false</filtering> 默认--><!--<excludes><exclude>env/**/*.*</exclude></excludes>--></resource><!-- 拷贝脚本文件 --><resource><directory>scripts</directory><includes><include>*.sh</include></includes><targetPath>${project.build.directory}/scripts</targetPath></resource><resource><!-- 需要覆盖同名文件,需要 filtering 设置为 true, 默认 targetPath 为${project.build.outputDirectory} 即 target/classes 下--><directory>src/main/resources/env</directory><filtering>true</filtering></resource></resources>
http://www.dtcms.com/a/338219.html

相关文章:

  • 小程序被爬虫攻击,使用waf能防护吗?
  • Vision Master的C#脚本与opencv联合编程
  • 【opencv-Python学习笔记(7):图像平滑处理】
  • 【图像算法 - 17】慧眼识“果”:基于深度学习与OpenCV的苹果智能检测系统(附完整代码)
  • sqli-labs通关笔记-第54关 GET字符型注入(单引号闭合 限制10次探测机会)
  • 英特尔公司Darren Pulsipher 博士:以架构之力推动政府数字化转型
  • 【leetcode】392. 判断子序列
  • 【yocto】为什么要选择yocto?
  • leetcode4_452 and 763
  • 力扣热题100------19.删除链表的倒数第N个结点
  • 【MongoDB与Python:数据库操作入门教程】
  • 力扣hot100:移动零问题的巧妙解决:双指针与原地交换策略(283)
  • ETL中统一调度的方式
  • Vue深入组件:组件事件详解1
  • 如何使用 React 101 的 Highcharts 包装器
  • 【网络安全实验报告】实验七:简单的防火墙搭建实验
  • css word-pass
  • 数据转换细节揭秘:ETL如何精准映射复杂业务逻辑
  • 专题:2025AI技术应用与发展报告|附600+份报告PDF、数据仪表盘汇总下载
  • 前端处理导出PDF。Vue导出pdf
  • GPT-5博士级AI使用教程及国内平替方案
  • 活到老学到老之vue-vben-admin项目安装
  • WordPress (LNMP 架构) 一键部署 Playbook
  • django+Vue3实现前后端分离式实时聊天室
  • Java面试考点
  • ​Kali Linux 环境中的系统配置文件与用户配置文件大全
  • MySQL 自增主键满了咋办?
  • PowerBI CrossFilter解决关联关系过滤传播问题
  • 对象存储 COS 端到端质量系列 —— 终端网络诊断工具
  • 【大模型】RAG