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

pom.xml文件中的${}变量从哪里传值

在 Maven 的 pom.xml 文件中,${} 格式的变量(称为属性占位符)的值来源主要有以下几种途径:


1. ​内置属性(Maven 预定义)​

  • ${project.basedir}:项目根目录
  • ${project.version}:项目版本
  • ${project.groupId}:项目 Group ID
  • ${maven.build.timestamp}:构建时间戳
  • 完整列表见 Maven Properties Reference。

2. ​**pom.xml 内自定义属性**​

<properties> 标签中定义:

<properties><java.version>17</java.version><spring.version>5.3.10</spring.version>
</properties>

使用时:${java.version}${spring.version}


3. ​父 POM 继承的属性

如果项目继承自父 POM(如 Spring Boot Starter Parent):

<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.1.0</version>
</parent>

父 POM 中定义的属性(如 ${java.version})会自动继承。


4. ​Settings.xml 文件中的属性

在 Maven 的全局配置文件 ~/.m2/settings.xml 或项目级 settings.xml 中定义:

<settings><profiles><profile><properties><env>production</env></properties></profile></profiles>
</settings>

使用时:${env}


5. ​命令行动态传入

通过 -D 参数在构建命令中传递:

mvn clean install -Dcustom.property=value

pom.xml 中直接使用 ${custom.property}


6. ​环境变量

系统环境变量可通过 env. 前缀访问:

<!-- 获取操作系统环境变量 -->
<property><path>${env.PATH}</path> 
</property>

7. ​资源过滤(Resource Filtering)​

src/main/resources 目录下的文件(如 application.properties)中定义属性,并通过资源过滤传递到 pom.xml

<build><resources><resource><directory>src/main/resources</directory><filtering>true</filtering></resource></resources>
</build>

优先级顺序(高 → 低):

  1. 命令行参数​(-Dproperty=value
  2. pom.xml 中的 <properties>
  3. 父 POM 中的属性
  4. settings.xml 中的属性
  5. 环境变量
  6. 内置属性

检查属性值来源

  • 通过 mvn help:effective-pom 命令查看最终生效的 POM(包含所有属性解析结果)。
  • 在构建时添加 -X 参数(调试模式)查看详细解析过程:
    mvn clean install -X

通过以上途径,Maven 在构建时会动态替换 pom.xml 中的所有 ${} 占位符。

http://www.dtcms.com/a/286966.html

相关文章:

  • Couchbase 可观测性最佳实践
  • ModbusRTU转profibus网关与涡街液体流量计通讯读取流量计温度
  • Android性能优化之启动优化
  • python学智能算法(二十三)|SVM-几何距离
  • Python 入门手札:从 0 到会--第九天Python的模块化编程--模块、包以及常见系统模块和第三方模块总结
  • 微店平台商品详情接口技术实现指南
  • C语言:预处理
  • 软件测试全谱系深度解析:从单元到生产的质量保障体系
  • JavaScript笔记
  • 功能安全之BIST的基本原理
  • 关于tftp怎么把res文件夹传输给开发板的操作步骤:
  • 通过代码识别大小端模式
  • 先让 AI 学会害怕,再让它握紧方向盘
  • Unity 多人游戏框架学习系列六
  • YT Config Tool 添加FreeRTOS模块
  • 【linux V0.11】kernel(水)
  • 2025年6月GESP(C++二级): 幂和数
  • 游戏盾能否保护业务免受DDoS攻击吗?
  • Django母婴商城项目实践(五)- 数据模型的搭建
  • 【Python练习】 049. 编写一个函数,实现简单的文本编辑器功能,支持增删改查
  • 你的品牌需要一个AI首席内容官——解构BrandCraft如何解决内容创作的终极痛点
  • 枚举算法入门
  • 【2025/07/18】GitHub 今日热门项目
  • 北斗网格位置码详解:经纬度到二维网格码的转换(非极地)
  • 针对BERT模型的理解
  • 04-三思而后行:解锁AI的“内心戏”
  • VMware安装Win10教程(附安装包)虚拟机下载详细安装图文教程
  • chainlink VRF中文教程(含mock),解决error: Arithmetic Underflow in createSubscription
  • bmp图像操作:bmp图像保存及raw与bmp转换
  • 二分答案之第 K 小/大