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版本。