0%

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> 标签中自定义的属性,用于统一管理版本号、路径等可复用的配置。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<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 系统属性

1
mvn help:system  # 输出所有系统属性和环境变量

环境变量属性(Environment Variables)

引用操作系统的环境变量,前缀为 env.,大小写敏感。

常用环境变量属性:

属性 含义
${env.JAVA_HOME} Java 安装目录
${env.PATH} 系统路径变量
${env.USER} 当前用户名(Linux/Mac)
${env.USERNAME} 当前用户名(Windows)

属性的使用场景与技巧

  1. 版本统一管理

    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>
  2. 动态路径配置

    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
    2
    app.name=${project.artifactId}
    app.version=${project.version}
  3. 命令行覆盖属性
    通过 -D 参数在命令行临时修改属性值:

    1
    mvn package -Dlog4j.version=2.18.0  # 临时覆盖log4j版本
  4. 条件激活配置
    结合 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>

欢迎关注我的其它发布渠道

表情 | 预览
快来做第一个评论的人吧~
Powered By Valine
v1.3.10