1. 概述

在这个教程中,我们将解释为什么Maven可能会使用与系统默认设置不同的Java版本,并展示Maven配置文件的位置。接着,我们将讲解如何在Maven中配置Java版本。

2. Maven配置

首先,让我们看一个可能的系统配置,其中Maven使用的Java版本与系统默认设置不同。Maven配置显示如下:

$ mvn -v
Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-10T17:41:47+01:00)
Maven home: C:\Users\test\apps\maven\3.3.9
Java version: 11.0.10, vendor: Oracle Corporation
Java home: C:\my\java\jdk-11.0.10
Default locale: pl_PL, platform encoding: Cp1250
OS name: "windows 10", version: "10.0", arch: "amd64", family: "dos"

如图所示,它返回了Maven版本、Java版本和操作系统信息。Maven工具使用的是JDK 11.0.10。

现在来看看我们系统的Java版本:

$ java -version
java version "13.0.2" 2020-01-14
Java(TM) SE Runtime Environment (build 13.0.2+8)
Java HotSpot(TM) 64-Bit Server VM (build 13.0.2+8, mixed mode, sharing)

默认的JDK设置为13.0.2。在接下来的部分,我们将解释为什么它与Maven使用的版本不匹配。

3. 全局设置JAVA_HOME

让我们看看默认设置。首先,JAVA_HOME(/java-home-on-windows-7-8-10-mac-os-x-linux)变量是Maven的必要配置。如果没有设置,mvn命令会返回错误消息:

$ mvn
Error: JAVA_HOME not found in your environment.
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation.

在Linux上,我们可以使用export命令来设置系统变量。Windows有专门的系统变量设置。当它被全局设置后,Maven将使用系统中设置的默认Java版本。

4. Maven配置文件

现在让我们快速了解一下在哪里可以找到Maven配置文件。配置可以在以下几个地方提供:

  • *.mavenrc/mavenrc_pre.cmd - 用户自定义脚本,位于用户的主目录中
  • settings.xml - 位于~/.m2目录下的文件,包含跨项目的配置
  • .mvn - 项目内的配置目录

此外,我们还可以使用MAVEN_OPTS环境变量来设置JVM启动参数。

5. 只为Maven设置JAVA_HOME

我们已经看到Java版本与Maven使用的版本不同。换句话说,Maven会覆盖由JAVA_HOME变量提供的默认配置。

我们可以在用户自定义脚本中设置,该脚本在mvn命令开始时执行。在Windows上,我们可以在%HOME%\\mavenrc_pre.bat%HOME%\\mavenrc_pre.cmd文件中设置它。Maven支持.bat.cmd文件。在文件中,我们只需设置JAVA_HOME变量:

set JAVA_HOME="C:\my\java\jdk-11.0.10"

另一方面,Linux有$HOME/.mavenrc文件用于相同的目的。在这里,我们以类似的方式设置变量:

JAVA_HOME=C:/my/java/jdk-11.0.10

通过这样的设置,即使系统的默认JDK是13,Maven也会使用JDK 11。

我们可以使用MAVEN_SKIP_RC标志跳过用户自定义脚本的执行。

此外,我们也可以直接在Maven可执行文件中设置变量。但是,这种方法不建议,因为当升级到更高版本的Maven时,它可能不会自动应用。

6. 总结

在这篇简短的文章中,我们解释了Maven如何可能使用不同于默认设置的Java版本。然后,我们展示了Maven配置文件的位置。最后,我们讲解了如何为Maven设置Java版本。