在 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 中的所有 ${} 占位符。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐