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 的"变量",让你在项目中集中管理版本号,提高可维护性。

相关推荐
我是咸鱼不闲呀17 分钟前
力扣Hot100系列19(Java)——[动态规划]总结(上)(爬楼梯,杨辉三角,打家劫舍,完全平方数,零钱兑换)
java·leetcode·动态规划
加油,小猿猿43 分钟前
Java开发日志-双数据库事务问题
java·开发语言·数据库
yuluo_YX1 小时前
Reactive 编程 - Java Reactor
java·python·apache
山岚的运维笔记1 小时前
SQL Server笔记 -- 第20章:TRY/CATCH
java·数据库·笔记·sql·microsoft·sqlserver
南极企鹅1 小时前
springBoot项目有几个端口
java·spring boot·后端
清风拂山岗 明月照大江2 小时前
Redis笔记汇总
java·redis·缓存
xiaoxue..2 小时前
合并两个升序链表 与 合并k个升序链表
java·javascript·数据结构·链表·面试
忧郁的Mr.Li2 小时前
SpringBoot中实现多数据源配置
java·spring boot·后端
yq1982043011562 小时前
静思书屋:基于Java Web技术栈构建高性能图书信息平台实践
java·开发语言·前端
一个public的class2 小时前
你在浏览器输入一个网址,到底发生了什么?
java·开发语言·javascript