1. 概述
本文将深入探讨 Maven 中的预定义属性。这些属性让构建配置更动态、灵活且可复用,支持分层设置默认值并按需覆盖。下面我们详细解析这些属性的用法和技巧。
2. Maven 预定义属性
Maven 内置了许多实用属性,可直接用于简化配置。我们甚至能在 pom.xml
中自定义它们。这些属性还能在资源文件(如 application.properties
)中通过 Maven 资源插件的过滤功能使用,只需用 ${}
包裹即可。
2.1. 基础用法示例
以下示例展示如何使用输出目录属性:
<?xml version="1.0" encoding="UTF-8"?>
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>example.override.properties</groupId>
<artifactId>parameter-maven-plugin</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>maven-plugin</packaging>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-plugin-plugin</artifactId>
<version>3.2</version>
<configuration>
<outputDirectory>${project.build.directory}</outputDirectory>
</configuration>
</plugin>
</plugins>
</build>
</project>
✅ 此例通过 ${project.build.directory}
获取默认输出目录(即 target
目录)
2.2. 属性覆盖示例
通过自定义路径覆盖默认值:
<?xml version="1.0" encoding="UTF-8"?>
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>example.override.properties</groupId>
<artifactId>parameter-maven-plugin</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>maven-plugin</packaging>
<build>
<directory>src/main/resources/custom</directory>
</build>
</project>
⚠️ 通过 <project> -> <build> -> <directory>
层级结构,将 ${project.build.directory}
覆盖为 src/main/resources/custom
3. 项目信息属性
这些属性用于访问项目元数据、配置和构建信息:
属性 | 说明 |
---|---|
${project.packaging} |
项目打包类型(默认 jar ) |
${project.basedir} |
项目根目录(pom.xml 所在位置) |
${project.groupId} |
项目组 ID(可继承父 POM) |
${project.version} |
项目版本(可继承父 POM) |
4. 项目构建信息属性
控制构建过程文件存储位置的核心属性:
属性 | 默认值 | 说明 |
---|---|---|
${project.build.directory} |
target/ |
构建文件根目录 |
${project.build.outputDirectory} |
target/classes |
主代码编译输出目录 |
${project.build.testOutputDirectory} |
target/test-classes |
测试代码编译输出目录 |
${project.build.sourceDirectory} |
src/main/java |
主代码源码目录 |
${project.build.testSourceDirectory} |
src/test/java |
测试代码源码目录 |
${project.build.resources} |
src/main/resources |
主资源文件目录 |
${project.build.testResources} |
src/test/resources |
测试资源文件目录 |
${project.build.finalName} |
${artifactId}-${version} |
构建产物最终名称 |
5. 系统属性
Maven 能访问 JVM 或运行时定义的系统属性:
属性 | 说明 |
---|---|
${java.home} |
JDK/JRE 安装路径(⚠️ 生产环境慎用,建议用 ${env.JAVA_HOME} ) |
${java.version} |
Java 运行时版本 |
${os.name} |
操作系统名称(如 Windows/macOS) |
${os.version} |
操作系统版本 |
${user.dir} |
Maven 执行时的工作目录 |
6. Maven 专用属性
Maven 运行时和配置相关属性:
属性 | 说明 |
---|---|
${maven.version} |
当前 Maven 版本 |
${settings.localRepository} |
本地仓库路径(默认 ${user.home}/.m2/repository ) |
${settings.interactiveMode} |
是否启用交互模式(默认 true ) |
${settings.offline} |
是否启用离线模式(默认 false ) |
7. 总结
Maven 预定义属性提供了强大的配置灵活性,建议始终优先使用这些属性而非硬编码路径或值。这不仅能提升项目可维护性,还能避免跨环境部署时的踩坑问题。合理运用这些属性,能让你的 pom.xml
更简洁高效。