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

如何将Maven设置为使用1.7?


当前回答

用上面的答案我无法解决这个问题,我尝试了很多方法来解决这个问题,我得到了它。我希望像我这样的人能解决这个问题。

我正在使用brew安装java和maven。 对我来说,我想使用java 1.8。所以我安装了java 1.8 但是maven仍然使用17.0.2版本

解决方案: 安装Java 1.8 我参考这个网站来安装它:https://devqa.io/brew-install-java/

MVN——版本,记住版本\

cat /usr/local/Cellar/maven/VERSION(for me 3.8.5)/bin/mvn

然后你会看到

#!/bin/bash
JAVA_HOME="${JAVA_HOME:-/usr/local/opt/openjdk/libexec/openjdk.jdk/Contents/Home}" exec "/usr/local/Cellar/maven/3.8.5/libexec/bin/mvn"  "$@"\

检查这个目录

ls /usr/local/opt

您将看到openjdk、openjdk@17、openjdk@8等文件

在MVN文件中将openjdk目录更改为openjdk@8:

#!/bin/bash
JAVA_HOME="${JAVA_HOME:-/usr/local/opt/openjdk@8/libexec/openjdk.jdk/Contents/Home}" exec "/usr/local/Cellar/maven/3.8.5/libexec/bin/mvn"  "$@"\

其他回答

Maven使用JAVA_HOME参数来查找应该运行哪个Java版本。我从你的评论中看到,你不能在配置中改变它。

您可以在启动maven之前设置JAVA_HOME参数(如果需要,可以在启动maven之后将其更改回来)。 你也可以进入你的mvn(非windows)/mvn.bat/mvn.cmd(windows)并在那里显式设置你的java版本。

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

mvn11.cmd

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

然后你可以使用mvn11在指定的JDK中运行Maven。

在终端vi ~/.bash_profile 之后,将下面的路径粘贴到基本配置文件中,并用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

执行source ~/。Bash_profile让它永远工作 在此之后,您可以在终端中运行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安装。

您只需要在调用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中工作得很好:)

Ondrej的回答 完美的工作。它真正解决了问题。工具链文档中详细介绍了其他一些事情

在项目POM中添加maven-toolchains-plugin 配置maven-toolchains-plugin以使用toolchains.xml文件中配置的工具链中的特定JDK。

请看下面的配置示例:

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>/Library/Java/JavaVirtualMachines/jdk1.8.0_301.jdk/Contents/Home</jdkHome>
    </configuration>
  </toolchain>
  <toolchain>
    <type>jdk</type>
    <provides>
      <version>17</version>
      <vendor>sun</vendor>
    </provides>
    <configuration>
      <jdkHome>/Library/Java/JavaVirtualMachines/jdk-17.0.2.jdk/Contents/Home</jdkHome>
    </configuration>
  </toolchain>
  <toolchain>
    <type>jdk</type>
    <provides>
      <version>11</version>
      <vendor>sun</vendor>
    </provides>
    <configuration>
      <jdkHome>/Library/Java/JavaVirtualMachines/jdk-11.0.12.jdk/Contents/Home</jdkHome>
    </configuration>
  </toolchain>
</toolchains>

如上所述,这适用于安装了多个java版本的机器。 然后在项目的POM中,maven-toolchains-plugin被配置为使用定义为工具链的JDK版本之一。

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-toolchains-plugin</artifactId>
  <executions>
    <execution>
      <goals>
        <goal>toolchain</goal>
      </goals>
    </execution>
  </executions>
  <configuration>
    <toolchains>
      <jdk>
        <version>11</version>
        <vendor>sun</vendor>
      </jdk>
    </toolchains>
  </configuration>
</plugin>