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