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

相关推荐
San813_LDD1 小时前
[C语言]《Dev-C++ 报错解决手册(Day0607 精华版)》
java·前端·javascript
Anastasiozzzz2 小时前
从有限状态机到智能体图:传统 FSM 与 Agent Graph的演进
java·人工智能·python·ai
wang09078 小时前
自己动手写一个spring之IOC_2
java·后端·spring
来杯@Java8 小时前
学生选课管理系统(基于springboot+vue前后端分离的项目)计算机毕业设计java
java·spring boot·spring·vue·毕业设计·maven·mybatis
不知名的老吴9 小时前
线程的生命周期之线程“插队“
java·开发语言·python
ANnianStriver9 小时前
PetLumina-02-后端开发与前后端联调
java·ai·sa-token
杨了个杨898210 小时前
Keepalived + Nginx + HAProxy 高可用架构部署实战案例
java·nginx·架构
马士兵教育12 小时前
Java还有前景吗?Java+AI大模型学习路线及项目?
java·人工智能·python·学习·机器学习
snow@li13 小时前
Java:理解 Gradle / 后端项目的管家 / 打包SpringBoot 应用 / 完成编译、下载依赖、运行测试、打包 JAR/WAR / 速查表
java