241

在我的机器上,我安装了两个 Java 版本:(我手动安装了 1.6 和 1.7)。我需要他们两个用于不同的项目。但是对于 Maven,我需要 1.7,但我的 Maven 使用 1.6 Java 版本。

如何将 Maven 设置为使用 1.7?

4

23 回答 23

200

Maven 使用该JAVA_HOME参数来查找它应该运行的 Java 版本。我从您的评论中看到您无法在配置中更改它。

  • 您可以JAVA_HOME在启动 maven 之前设置参数(如果需要,可以在之后将其更改回来)。
  • 您也可以进入您的mvn(non-windows)/ mvn.bat/ mvn.cmd(windows) 并在那里明确设置您的 java 版本。
于 2013-10-29T09:47:51.560 回答
94

编辑:

Ondrej的回答提出了一个更好的解决方案,它可以避免记住别名。


原答案:

为安装了多个 Java 版本的人添加解决方案

我们有一个庞大的代码库,其中大部分是 Java。我所做的大部分工作都是用 Java 1.7 或 1.8 编写的。由于JAVA_HOME是静态的,我在我.bashrc的运行 Maven 中创建了具有不同值的别名:

alias mvn5="JAVA_HOME=/usr/local/java5 && mvn"
alias mvn6="JAVA_HOME=/usr/local/java6 && mvn"
alias mvn7="JAVA_HOME=/usr/local/java7 && mvn"
alias mvn8="JAVA_HOME=/usr/local/java8 && mvn"

这让我可以在我的开发机器上从命令行运行 Maven,而不管项目中使用的 JDK 版本如何。

于 2017-04-20T16:09:22.813 回答
88

在 POM 中,您可以设置编译器属性,例如 1.8:

<project>
...
 <properties>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
  </properties>
...
</project>
于 2017-03-30T15:38:18.203 回答
63

最近,在 Maven 工作了七年之后,我了解了 toolchains.xml。Maven 甚至已经记录并从 2.0.9 开始支持它 -工具链文档

因此,我在 ~/.m2/ 文件夹中添加了一个 toolchains.xml 文件,其中包含以下内容:

<toolchains xmlns="http://maven.apache.org/TOOLCHAINS/1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://maven.apache.org/TOOLCHAINS/1.1.0 http://maven.apache.org/xsd/toolchains-1.1.0.xsd">
 <!-- JDK toolchains -->
 <toolchain>
   <type>jdk</type>
   <provides>
     <version>1.8</version>
     <vendor>sun</vendor>
   </provides>
   <configuration>
     <jdkHome>/opt/java8</jdkHome>
   </configuration>
 </toolchain>
 <toolchain>
   <type>jdk</type>
   <provides>
     <version>1.7</version>
     <vendor>sun</vendor>
   </provides>
   <configuration>
     <jdkHome>/opt/java7</jdkHome>
   </configuration>
 </toolchain>
</toolchains>

它允许您定义 Maven 可以使用哪些不同的 JDK 来构建项目,而与 Maven 运行时使用的 JDK 无关。有点像在 IDE 中在项目级别定义 JDK 时。

于 2016-02-17T17:27:14.073 回答
61

在窗户上

如果您不想更改JAVA_HOME系统变量中的变量。

编辑您的mvn.bat文件并添加这样的一行

set JAVA_HOME=C:\Program Files\Java\jdk1.7.0_45\jre

这可以在@REM ==== START VALIDATION ====@Jonathan 提到之后完成

在 Mac(和 Linux ?)

如果您不想更改您的JAVA_HOME变量~/.bashrc~/.bash_profile

您可以创建一个~/.mavenrc文件并JAVA_HOME使用java_home 工具重新定义您的文件

export JAVA_HOME=`/usr/libexec/java_home -v 1.7.0_45`

完整性检查

您可以通过执行以下命令来验证一切是否正常。jdk版本应该不同。

mvn -version

然后

java -version

于 2015-07-30T08:11:22.177 回答
35

添加我的两分钱并明确提供解决方案。

我的 Windows 机器上安装了两个 JDK -JDK 1.5JDK 1.6.

我的默认值(并设置为 windows 系统环境变量)JAVA_HOME设置为JDK 1.5.

但是,我有一个需要使用JDK 1.6.

我在这种情况下的解决方案(有效!),正如@DanielBarbarian将其设置在mvn.bat.

对于一些不熟悉window的批处理文件的人,我基本上只是在(ie, )set JAVA_HOME=<path_to_other_jdk>后面加了一行:@REM ==== START VALIDATION ====mvn.bat%MAVEN_HOME%\bin\mvn.bat

@REM ==== START VALIDATION ====
set JAVA_HOME=C:\Program Files\Java\jdk1.6.0_45\jre
if not "%JAVA_HOME%" == "" goto OkJHome
于 2014-05-08T02:49:54.757 回答
9

您可以按照以下说明将 Maven 设置为使用任何 java 版本。

在您的机器链接中安装 jenv

通过在命令行中发出以下命令来检查机器中安装的可用 java 版本。

jenv 版本

您可以使用以下命令指定全局 Java 版本。

jenv 全局 oracle64-1.6.0.39

您可以在命令行的目录中使用以下命令为任何目录(项目)指定本地 Java 版本。

jenv 本地 oracle64-1.7.0.11

在 pom.xml 中添加正确的 java 版本

如果您在命令行中运行 maven,请使用以下命令安装jenv maven 插件

jenv 启用插件 Maven

现在您可以毫无问题地将您机器中的任何 java 版本配置到任何项目中。

于 2019-06-07T02:45:55.577 回答
8

一个简单的问题解决方案 -

JAVA_HOME=/usr/lib/jvm/java-6-sun/ mvn 全新安装

在 Mac 上,它看起来像 -

JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_21.jdk/Contents/Home/ mvn clean install

PS:我发现的一种特殊情况是上面给出的命令不适用于“鱼”外壳。我也有可用的 bash shell,它在那里工作得很好。只需使用命令“bash”切换到 bash shell。

于 2017-03-03T12:23:05.957 回答
8

在 Mac 上,(假设您安装了正确的版本)

JAVA_HOME=`/usr/libexec/java_home -v 1.8` mvn clean install -DskipTests

于 2019-08-20T16:17:44.287 回答
6

在 Windows 上,我只需将不同 JDK 版本的多个批处理文件添加到 Maven bin 文件夹中,如下所示:

mvn11.cmd

@echo off
setlocal
set "JAVA_HOME=path\to\jdk11"
set "path=%JAVA_HOME%;%path%"
mvn %*

然后就可以使用mvn11指定的JDK来运行Maven了。

于 2019-07-04T06:56:30.297 回答
5

您可以使用不同的 JDKmaven-compiler-plugin.

只需javac<executable>标签中指定路径即可。例如对于 java11,它看起来像:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.8.0</version>
    <configuration>
        <source>11</source>
        <target>11</target>
        <fork>true</fork>
        <executable>C:\Program Files\Java\jdk-11.0.1\bin\javac</executable> <!--PATH TO JAVAC -->
    </configuration>
</plugin>
于 2019-03-30T21:57:35.397 回答
5

我正在使用 Mac,上面的答案都没有帮助我。我发现 maven 从以下指定的路径加载自己的 JAVA_HOME:~/.mavenrc

我将文件的内容更改为:

JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_45.jdk/Contents/Home

对于 Linux,它看起来像:

export JAVA_HOME=/usr/lib/jvm/java-8-oracle/jre
于 2021-10-06T10:40:38.710 回答
5

在不更改环境变量的情况下,您可以使用 Maven Compiler Plugin 根据项目级别管理 java 版本。

方法一

<properties>
    <maven.compiler.source>1.7</maven.compiler.source>
    <maven.compiler.target>1.7</maven.compiler.target>
</properties>
<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

方法二

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.7</source>
                <target>1.7</target>
            </configuration>
        </plugin>
    </plugins>
</build>
于 2019-10-22T08:48:37.913 回答
4

为了避免对您的项目和环境变量产生任何影响,您可以将 Maven 编译器插件配置为项目的 POM,指定源和目标 java 版本

  <plugins>
    <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.5.1</version>
        <configuration>
            <source>1.7</source>
            <target>1.7</target>
        </configuration>
    </plugin>
    ...
  </plugins>
于 2017-02-02T09:25:22.010 回答
2

最近安装了 Java10,看看它有什么新的和有趣的。一旦我这样做并尝试运行使用 java8 的现有项目。令我惊讶的是,maven 开始使用 java10 作为其默认 java 版本,即使我的 JAVA_HOME 设置为使用java8 — /usr/libexec/java_home -v 1.8

鉴于,我的安装是使用 brew 完成的——Brew 只是 Mac OS 的包管理器,我的 M2_HOME 是自动设置的。这通常在/usr/local/Cellar/maven/3.5.4

有了这些新发现的知识,我跑了

nano /usr/local/Cellar/maven/3.5.4/bin/mvn

内容是

#!/bin/bash
JAVA_HOME="${JAVA_HOME:-$(/usr/libexec/java_home)}" exec "/usr/local/Cellar/maven/3.5.4/libexec/bin/mvn" "$@"

重要的一点是

"${JAVA_HOME:-$(/usr/libexec/java_home)}"

要解决此问题,您需要指定需要 maven 的默认 Java 版本。所以就我而言,我需要java8。

更新/usr/local/Cellar/maven/3.5.4/bin/mvn文件如下

#!/bin/bash
JAVA_HOME="${JAVA_HOME:-$(/usr/libexec/java_home -v 1.8)}" exec "/usr/local/Cellar/maven/3.5.4/libexec/bin/mvn" "$@"
于 2021-03-09T03:25:39.047 回答
1

在 Linux/Unix 上,'mvn' shell 脚本中的 JAVA_HOME 被

$HOME/.mavenrc

在哪里添加 JAVA_HOME 和 MAVEN 路径变量在 linux

于 2018-11-21T13:48:06.790 回答
1

仅在控制台中设置,我在 mac 上没有成功,JAVA_HOME但我用这种方法成功了

  • 在您的主目录中创建 .mavenrc 文件(因此该文件的路径将是~/.mavenrc
  • 粘贴到该文件中export JAVA_HOME=$(/usr/libexec/java_home -v 1.7)
于 2019-01-31T14:20:21.017 回答
1
  1. 在终端上vi ~/.bash_profile
  2. 之后,将以下路径粘贴到基本配置文件中并通过 vim 命令保存wq!
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_211.jdk/Contents/Home
export M2_HOME=/Users/mj/Tools/apache-maven-3.8.1
  1. 运行source ~/.bash_profile以使其永远工作

  2. 之后,您可以mvn -v在终端中运行以检查

Maven home: /Users/mj/Tools/apache-maven-3.8.1
Java version: 1.8.0_211, vendor: Oracle Corporation, 
runtime: /Users/mj/Tools/jdk1.8.0_211.jdk/Contents/Home/jre
Default locale: en_CN, platform encoding: UTF-8
OS name: "mac os x", version: "10.16", arch: "x86_64", family: "mac"

如果您想知道原因,请阅读以下内容

许多基于 Java 的应用程序使用JAVA_HOME来定义 Java 运行时环境 (JRE) 的安装位置。 M2_HOME由Maven使用,它再次告诉程序在哪里找到 Maven 安装。

于 2021-05-27T03:21:14.627 回答
1
set JAVA_HOME=C:\Program Files\Java\jdk1.7.0_45\jre

添加上面的代码行作为第一条语句$MAVEN_HOME\bin\mvn.cmd在 Windows 10 中立即为我工作。

于 2022-01-17T17:13:36.040 回答
0

我正在使用 jenv 并面临“javax.xml.bind.annotation”的编译错误,因为终端中的 mvn 使用的是 openjdk 13

Maven home: /usr/local/Cellar/maven/3.6.3_1/libexec
Java version: 13.0.2, vendor: N/A, runtime: /usr/local/Cellar/openjdk/13.0.2+8_2/libexec/openjdk.jdk/Contents/Home

对我来说,它在运行'jenv enable-plugin maven'后工作,如此处建议 https://stackoverflow.com/a/56487374/1582473

于 2021-04-12T17:52:53.030 回答
0

您也可以安装两个版本的 maven,然后编辑其中一个,在此处编辑:

mvn(非windows)/mvn.bat/mvn.cmd(windows)

将您的 %java_home% 外观替换为您的 java 所需路径。然后从修改后的路径执行 maven

于 2018-12-13T10:33:59.290 回答
0

您只需在调用 JAVA_HOME 之前将您的 JAVA 版本添加到 mvn 文件中,例如我在 .bashrc 文件中的 JAVA 版本是 Java-17,我想使用 Java-11 运行 maven:

在文件中/usr/share/maven/bin/mvn:我添加:

JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64

JAVA_HOME在脚本中调用之前

然后它适用于 Java-11 :)

于 2022-01-08T20:13:25.407 回答
0

我使用了@Jonathan 的基本想法。我已经设置了窗口: set JAVA_HOME=C:\Program Files\java\AdoptOpenJDK-11.0.8+10 call mvn clean package -DskipTests

于 2020-10-09T00:01:36.207 回答