配置 Apache Maven

Apache Maven 使用本身和构建项目的配置位于多个位置:

MAVEN_OPTS 环境变量:

此变量包含用于启动运行 Maven 的 JVM 的参数,并可用于为其提供其他选项。例如,JVM 内存设置可以用值 -Xms256m -Xmx512m 来定义。

MAVEN_ARGS 环境变量:

从 Maven 3.9.0 开始,此变量包含传递给 Maven 的参数,然后再包含 CLI 参数。例如,可以使用值-B -V checkstyle:checkstyle 定义选项和目标。

settings.xml 文件:

设置文件位于 USER_HOME/.m2 中,旨在包含跨项目使用 Maven 的任何配置.

.mvn 目录:

这些文件位于项目的顶级目录中

  • maven.config
  • jvm.config
  • extensions.xml

包含用于运行 Maven 的项目特定配置.

该目录是项目的一部分,可以签入您的版本控制中.

.mvn/extensions.xml 文件:

旧方法(Maven 3.2.5 之前)是创建一个包含扩展的 jar(如果您有其他依赖项,则必须着色)并将其手动放入 ${MAVEN_HOME}/lib/ext目录中。这意味着您必须更改 Maven 安装。结果是,每个喜欢使用它的人都需要更改它的安装,并使开发人员的入职更加不方便。另一种选择是通过 mvn -Dmaven.ext.class.path=extension.jar在命令行上提供 jar 的路径。这样做的缺点是,每次调用 Maven 时,都会将这些选项提供给 Maven 构建。也不是很方便。

从现在开始,这可以更简单,更像 Maven 的方式完成。因此,您可以定义一个 .mvn/extensions.xml 文件,如下所示:

<extensions xmlns="http://maven.apache.org/EXTENSIONS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/EXTENSIONS/1.0.0 http://maven.apache.org/xsd/core-extensions-1.0.0.xsd">
  <extension>
    <groupId/>
    <artifactId/>
    <version/>
  </extension>
</extensions>

现在,您可以通过将常用的 Maven 坐标 groupId、artifactId、version 定义为任何其他工件来简单地使用扩展。此外,这些扩展的所有传递依赖项都将自动从您的存储库下载。因此不再需要创建阴影工件.

.mvn/maven.config 文件:

很难定义一组用于调用 maven 命令行的通用选项。从 Maven 3.3.1+ 开始,这可以通过将此选项放入脚本来解决,但现在可以通过定义包含 mvn 命令行配置选项的.mvn/maven.config 文件来简单完成.

例如,像 -T3 -U --fail-at-end 这样的东西。因此,您只需使用mvn clean package 而不是 mvn -T3 -U --fail-at-end clean package 来调用 Maven,并且不要错过每次调用时的 -T3 -U --fail-at-end 选项。.mvn/maven.config 位于项目的顶级 .mvn目录中,如果位于多模块构建的根目录中,则该目录也有效.

注意从 Maven 3.9.0开始,每个参数都必须放在新行中,因此对于提到的示例,您的文件将包含如下内容:

-T3
-U 
--fail-at-end

.mvn/jvm.config 文件:

从 Maven 3.3.1+ 开始,您可以通过 .mvn/jvm.config文件定义 JVM 配置,这意味着您可以基于每个项目定义构建选项。此文件将成为项目的一部分,并将与您的项目一起签入。因此,不再需要MAVEN_OPTS,.mavenrc 文件.

例如,如果您将以下 JVM 选项放入.mvn/jvm.config文件中

-Xmx2048m -Xms1024m -XX:MaxPermSize=512m -Djava.awt.headless=true

您无需在MAVEN_OPTS中使用这些选项,也无需在不同配置之间切换.

其他指南

以下指南包含特定配置方面的更多信息: