当前位置: 首页 > 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.lryc.cn/news/624754.html

相关文章:

  • 深度研究系统、方法与应用的综述
  • kubeadm方式部署k8s集群
  • zsh 使用笔记 命令行智能提示 bash智能
  • 视频因为264问题无法网页播放,解决方案之一:转化视频
  • 【matlab】考虑源荷不平衡的微电网鲁棒定价研究
  • 第7节 神经网络
  • grep命令要点、详解和示例
  • 淘宝扭蛋机小程序开发:引领电商娱乐化新潮流
  • 剧本杀小程序系统开发:保障游戏公平,营造健康娱乐环境
  • 香港数据合集:建筑物、手机基站、POI、职住数据、用地类型
  • 27.Linux 使用yum安装lamp,部署wordpress
  • 【CV 目标检测】Fast RCNN模型③——模型训练/预测
  • 短剧小程序系统开发:推动短剧行业规范化与标准化发展
  • 移动端PFD预览组件Vue3(非插件)
  • Nacos-6--Naco的QUIC协议实现高可用的工作原理
  • Linux系统启动原理及故障排除
  • GitHub Actions 从核心思想到最佳实践
  • Go语言基础结构全解析
  • 海洋牧场:奏响乡村振兴的蓝色乐章
  • Mysql——前模糊索引失效原因及解决方式
  • Linux软件编程(七)线程间同步与进程间通信
  • Tomcat Wrapper源码解析:深入理解Servlet生命周期与请求分发机制
  • 【81页PPT】国内某知名大型制药企业制药数字化转型项目汇报方案(附下载方式)
  • Leetcode 3650. Minimum Cost Path with Edge Reversals
  • Linux学习:实现简单的共享内存通信
  • 06多段代码复杂度合成规则
  • 学习日志37 python
  • [优选算法专题二滑动窗口——水果成篮]
  • PyTorch数据处理工具箱(数据处理工具箱概述)
  • 【JavaEE】(16) Spring Boot 日志