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

相关推荐
哦虎!4 小时前
【JavaEE】网络初识
java
for_ever_love__5 小时前
MySQL ORDER BY 排序优化:从 Using filesort 到索引有序扫描(含双路 / 单路排序原理)
java·mysql·优化·存储·by·order·filesort
我是人✓6 小时前
Java文件上传三方式对比:从传统到SpringBoot
java·开发语言
欣栀♡6 小时前
JVM 频繁 Full GC 先看日志括号里的 cause,jstat 的 FGC 在 JDK 8 上会骗人
java·jvm
IT研究室6 小时前
最新计算机毕业设计选题推荐-基于spring boot的葡萄酒文化宣传网站-网站-文档指导-Java-springboot
java·spring boot·课程设计
慧都小项6 小时前
MyEclipse 中创建和测试 JAX-RS REST 接口:从项目配置到 REST Explorer
java·restful·myeclipse·jax-rs
Wang's Blog6 小时前
Java 项目实战: 交友项目 - 入门案例:编写 Dubbo 服务提供者
java·dubbo·交友
秋饼7 小时前
Spring AI 2.0 结构化输出企业级实战:从 BeanOutputConverter 源码到生产级解析容错
java·ai·技术分享·后端开发
摇滚侠7 小时前
《计算机是如何工作的:人人都能懂的计算机软硬件工作原理》第 9 章 机器码与汇编语言 阅读笔记 9
java·开发语言·笔记
Cc.Y7 小时前
Java零基础入门:深入Java核心:文件IO与序列化全解
java·开发语言·python