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

相关推荐
人活一口气2 小时前
从JVM调优到MCP协议:Java全栈技术体系深度总结与企业级架构实践
java·spring boot
NE_STOP4 小时前
Vibe Coding -- 完整项目案例实操
java
荣码4 小时前
GraphRAG:普通RAG只能回答"点"的问题,我踩了4个坑才搞懂
java·python
SimonKing4 小时前
Google第三方授权登录
java·后端·程序员
明月光8184 小时前
从一行 @Builder 说起:重新拾起 Java 的 Lombok、注解与 Builder 模式
java
考虑考虑14 小时前
Mybatis实现批量插入
java·后端·mybatis
咖啡八杯14 小时前
GoF设计模式——中介者模式
java·后端·spring·设计模式
青石路18 小时前
记一次多JDK版本问题的排查,一坑套一坑,差点没爬上来
java
像我这样帅的人丶你还21 小时前
Java 后端详解(五):Redis 缓存
java·后端·全栈
plainGeekDev1 天前
GreenDAO → Room
android·java·kotlin