Maven 预定义属性详解

1、简介

本文将带你了解 Maven 中的预定义属性。

2、Maven 预定义属性

Maven 有一些方便的内置属性,可以于简化配置。

如果需要,甚至可以直接在 pom.xml 文件中自定义它们。

这些属性也可以在任何由 Maven 资源插件的过滤功能处理的资源文件中使用,例如 application.properties 文件。在使用这些属性时,只需要将它们包装在 ${} 中。

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} 的默认值,即 src/main/resources

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} 此属性告诉 Maven 我们的项目构建为什么类型的构件。默认设置为 “jar"。
${project.basedir} 指向项目的根目录 —— 即 pom.xml 文件所在的文件夹。

某些属性,如 ${project.groupId}${project.version},如果没有显式指定,可以从父 POM 继承默认值。

4、项目构建信息属性

处理构建过程中文件生成和存储位置的特定属性:

属性 描述
${project.build.directory} 此属性作为构建过程中生成的所有文件的中心枢纽。默认为 “target/"。
${project.build.outputDirectory} 指定 Maven 放置主应用程序代码编译类的位置。默认位置为 “target/classes"。
${project.build.testOutputDirectory} 编译的测试类默认放置在 “target/test-classes” 中。
${project.build.sourceDirectory} 指向主 Java 源代码所在的目录。默认位置为 “src/main/java"。
${project.build.testSourceDirectory} 此属性指示单元测试源代码的存储位置。默认位置为 “src/test/java"。
${project.build.resources} 指定包含项目所有资源文件(如配置文件或图片)的目录。默认位置为 “src/main/resources"。
${project.build.testResources} 与上一个类似,但专门用于测试期间使用的资源。默认位置为 “src/test/resources"。
${project.build.finalName} 此属性决定最终构建构件(如 JAR 或 WAR 文件)的名称。默认将项目的构件 ID 与版本号组合,如 “${project.artifactId}-${project.version}"。

5、系统属性

除了自身的内置属性外,Maven 还可以访问计算机的 Java 虚拟机(JVM)提供的系统属性,或在运行程序时定义的属性。 这些属性就像环境特定详细信息的便捷快捷方式,例如文件路径或操作系统:

属性 描述
${java.home} 指示系统上 JDK 或 JRE 的安装位置。建议避免直接使用此属性。原因是不同的构建环境(如 CI/CD)可能有不同的 JDK 位置,这可能导致意外问题。更好的方法是使用 ${env.JAVA_HOME} 或创建一个显式指向 JDK 位置的自定义属性,因为它特别引用了 JAVA_HOME 环境变量,该变量通常指向 JDK 安装的根目录。
${java.version} 此属性简单地告诉我们正在使用的 Java 版本。
${os.name}${os.version} 这两个属性协同工作,告诉我们正在使用的操作系统(如 Windows 或 macOS)及其版本号。
${user.dir} 此属性告诉我们执行 Maven 的当前工作目录。

6、Maven 特定属性

特定于 Maven 运行时和配置的属性:

属性 描述
${maven.version} 此属性准确告诉我们当前运行的 Maven 版本。
${settings.localRepository} 此属性指向本地 Maven 仓库的位置。默认存储在 ${user.home}/.m2/repository 中。这是 Maven 下载和存储所有项目依赖的位置。
${settings.interactiveMode} 此属性决定 Maven 是否可以在构建过程中请求输入。默认设置为 true
${settings.offline} 此属性控制 Maven 是否应该在离线模式下运行。当设置为 true(非默认值)时,Maven 只使用本地仓库中已有的依赖。这在没有联网时很有用。

7、总结

本文介绍了 Maven 提供的多个内置属性。


Ref:https://www.baeldung.com/maven-predefined-properties