maven属性
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> 标签中自定义的属性,用于统一管理版本号、路径等可复用的配置。
示例:
<properties>
<!-- 定义依赖版本 -->
<log4j.version>2.17.1</log4j.version>
<jdk.version>1.8</jdk.version>
<!-- 定义路径 -->
<custom.src.dir>${project.basedir}/src/main/custom</custom.src.dir>
</properties>
<!-- 引用自定义属性 -->
<dependencies>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>${log4j.version}</version> <!-- 引用版本属性 -->
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>${jdk.version}</source> <!-- 引用JDK版本 -->
<target>${jdk.version}</target>
</configuration>
</plugin>
</plugins>
</build>
优势:集中管理易变配置(如版本号),修改时只需更新一处。
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 系统属性:
mvn help:system # 输出所有系统属性和环境变量
环境变量属性(Environment Variables)
引用操作系统的环境变量,前缀为 env.,大小写敏感。
常用环境变量属性:
| 属性 | 含义 |
|---|---|
${env.JAVA_HOME} |
Java 安装目录 |
${env.PATH} |
系统路径变量 |
${env.USER} |
当前用户名(Linux/Mac) |
${env.USERNAME} |
当前用户名(Windows) |
属性的使用场景与技巧
版本统一管理:
<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>动态路径配置:
<build> <resources> <resource> <directory>${project.basedir}/src/main/resources</directory> <filtering>true</filtering> <!-- 启用属性过滤 --> </resource> </resources> </build>此时资源文件(如
application.yml)中可直接使用 Maven 属性:app.name=${project.artifactId} app.version=${project.version}命令行覆盖属性:
通过-D参数在命令行临时修改属性值:mvn package -Dlog4j.version=2.18.0 # 临时覆盖log4j版本条件激活配置:
结合 Profile 实现不同环境下的属性切换:<profiles> <profile> <id>dev</id> <properties> <env>development</env> </properties> </profile> <profile> <id>prod</id> <properties> <env>production</env> </properties> </profile> </profiles>