Maven中的属性占位符的用法

java 复制代码
<dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>servlet-api</artifactId>
  <version>${servlet-api.version}</version>
</dependency>

${servlet-api.version}Maven 的属性占位符 ,表示一个可复用的版本变量。它会被你在 pom.xml 中定义的实际版本号替换。


1. 工作机制

pom.xml<properties> 标签内,你会看到类似这样的定义:

xml 复制代码
<properties>
    <servlet-api.version>2.5</servlet-api.version>  <!-- 实际版本号 -->
</properties>

当 Maven 构建项目时,会自动把 ${servlet-api.version} 替换为 2.5

2. 为什么要这样写?

优点统一管理,一改全改

假设你项目中有多个依赖都用到了 Servlet API:

xml 复制代码
<dependencies>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>servlet-api</artifactId>
        <version>${servlet-api.version}</version>
    </dependency>
    
    <!-- 其他依赖可能也依赖 servlet 版本 -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>5.x.x</version>
        <exclusions>
            <exclusion>
                <groupId>javax.servlet</groupId>
                <artifactId>servlet-api</artifactId>
                <!-- 这里也可以用 ${servlet-api.version} -->
            </exclusion>
        </exclusions>
    </dependency>
</dependencies>
  • 如果需要升级版本,只需改 <properties> 一处,不用逐个依赖修改
  • 避免多个依赖版本不一致导致的冲突

3. 如何找到实际值?

两种方法:

方法1:查看当前 pom.xml<properties> 部分

bash 复制代码
# 在 pom.xml 中搜索
grep -A 5 "<properties>" pom.xml

方法2:查看 Maven 有效 POM

bash 复制代码
# 会显示所有变量替换后的最终 pom
mvn help:effective-pom

4. 常见变量名约定

  • xxx.version:用于依赖版本(如 spring.version, junit.version
  • project.build.sourceEncoding:编码
  • maven.compiler.source/target:Java 版本

5. 示例

xml 复制代码
<project>
    <properties>
        <!-- 统一定义 -->
        <servlet-api.version>4.0.1</servlet-api.version>
        <junit.version>5.9.2</junit.version>
    </properties>

    <dependencies>
        <!-- 引用变量 -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>${servlet-api.version}</version>
        </dependency>
        
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter</artifactId>
            <version>${junit.version}</version>
        </dependency>
    </dependencies>
</project>

总结${servlet-api.version} 就是 Maven 的"变量",让你在项目中集中管理版本号,提高可维护性。

相关推荐
龙虾PRO22 分钟前
能源与股票量化核心差异,AI全链路落地实操手册
java·面试·职场和发展
llwszx34 分钟前
【Java/Go后端手撸原生Agent(第九篇):Plan-and-Execute规划模式——从“走一步看一步“到“先谋后动“】
java·python·golang·agent开发·plan模式·规划执行模式
ZJH__GO44 分钟前
网络编程v2--多客户端互通
java·运维·服务器·开发语言·计算机网络
霸道流氓气质1 小时前
SpringBoot中基于 AES-GCM + KMS 密钥管理的数据加解密 Starter 实践
java·数据库·spring boot
Gofarlic_OMS1 小时前
NX浮动许可调度黑名单机制,对比两款谁更合理
java·大数据·运维·开源·制造
乐观的Terry2 小时前
8、发布系统-完整流水线的核心
java·spring boot·spring·spring cloud
Alexalbb2 小时前
从角色过滤到可审计授权:单体系统数据权限设计复盘与演进
java
万亿少女的梦1682 小时前
基于Spring Boot的游戏交易管理系统设计与实现
java·spring boot·mysql·系统设计·交易管理
闲猫2 小时前
Agent工程实践:从WorkFlow到多Agent协作的落地笔记
java·服务器·前端
笨蛋不要掉眼泪3 小时前
Java虚拟机:常用参数
java·开发语言·python