Maven 属性详解:掌握配置灵活性的核心
Maven 属性是提升构建配置灵活性的关键机制,它允许在 POM 文件中定义和引用变量,实现配置的复用与动态调整。Maven 提供了六类属性,涵盖内置变量、项目配置、自定义参数等场景。
内置属性(Built-in Properties)
Maven 预定义的基础属性,无需配置即可直接使用,主要用于访问项目核心路径和版本信息。
属性 | 含义 |
---|---|
${basedir} |
项目根目录(包含 pom.xml 的目录) |
${version} |
项目版本号(等价于 ${project.version} ) |
${project.groupId} |
项目的 groupId (组织标识) |
${project.artifactId} |
项目的 artifactId (项目标识) |
POM 属性(Project Properties)
直接映射 pom.xml
中的配置,用于访问项目构建相关的路径和配置信息。
常用 POM 属性:
属性 | 含义 | 默认值 |
---|---|---|
${project.build.sourceDirectory} |
主源码目录 | src/main/java |
${project.build.testSourceDirectory} |
测试源码目录 | src/test/java |
${project.build.directory} |
构建输出根目录 | target |
${project.build.outputDirectory} |
主代码编译输出目录 | target/classes |
${project.build.testOutputDirectory} |
测试代码编译输出目录 | target/test-classes |
${project.build.finalName} |
打包后的文件名 | ${project.artifactId}-${project.version} |
自定义属性(User-defined Properties)
用户在 pom.xml
的 <properties>
标签中自定义的属性,用于统一管理版本号、路径等可复用的配置。
示例:
1 | <properties> |
优势:集中管理易变配置(如版本号),修改时只需更新一处。
Settings 属性(Settings Properties)
引用 Maven 全局配置文件 settings.xml
中的内容,前缀为 settings.
。
常用 Settings 属性:
属性 | 含义 |
---|---|
${settings.localRepository} |
本地仓库路径(默认 ~/.m2/repository ) |
${settings.proxies} |
代理配置信息 |
${settings.servers} |
服务器认证信息(如私服账号密码) |
注意:settings.xml
中的敏感信息(如密码)通常不直接在 POM 中引用,而是通过插件间接使用。
Java 系统属性(Java System Properties)
引用 Java 虚拟机的系统属性,可通过 java -D
参数传递,或使用默认 JVM 属性。
常用 Java 系统属性:
属性 | 含义 |
---|---|
${user.home} |
当前用户的主目录 |
${user.dir} |
当前工作目录 |
${java.home} |
JRE 安装目录 |
${os.name} |
操作系统名称 |
查看所有 Java 系统属性:
1 | mvn help:system # 输出所有系统属性和环境变量 |
环境变量属性(Environment Variables)
引用操作系统的环境变量,前缀为 env.
,大小写敏感。
常用环境变量属性:
属性 | 含义 |
---|---|
${env.JAVA_HOME} |
Java 安装目录 |
${env.PATH} |
系统路径变量 |
${env.USER} |
当前用户名(Linux/Mac) |
${env.USERNAME} |
当前用户名(Windows) |
属性的使用场景与技巧
版本统一管理:
1
2
3
4
5
6
7
8
9
10<properties>
<spring.boot.version>2.7.0</spring.boot.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>${spring.boot.version}</version>
</dependency>
</dependencies>动态路径配置:
1
2
3
4
5
6
7
8<build>
<resources>
<resource>
<directory>${project.basedir}/src/main/resources</directory>
<filtering>true</filtering> <!-- 启用属性过滤 -->
</resource>
</resources>
</build>此时资源文件(如
application.yml
)中可直接使用 Maven 属性:1
2app.name=${project.artifactId}
app.version=${project.version}命令行覆盖属性:
通过-D
参数在命令行临时修改属性值:1
mvn package -Dlog4j.version=2.18.0 # 临时覆盖log4j版本
条件激活配置:
结合 Profile 实现不同环境下的属性切换:1
2
3
4
5
6
7
8
9
10
11
12
13
14<profiles>
<profile>
<id>dev</id>
<properties>
<env>development</env>
</properties>
</profile>
<profile>
<id>prod</id>
<properties>
<env>production</env>
</properties>
</profile>
</profiles>
v1.3.10