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

如何将Maven设置为使用1.7?


当前回答

编辑:

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版本是什么。

其他回答

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

在你的机器上安装jenv链接

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

jenv版本

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

Jenv global oracle64-1.6.0.39

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

Jenv local oracle64-1.7.0.11

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

如果你在命令行中运行maven,使用下面的命令安装jenv maven插件

Jenv使能插件maven

现在,您可以在您的机器上为任何项目配置任何java版本,而不会遇到任何麻烦。

为了避免对项目和环境变量的任何影响,您可以将Maven Compiler Plugin配置为项目的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>

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

mvn11.cmd

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

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

我正在使用jenv,并面临“javax.xml.bind”的编译错误。注释”,因为终端中的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

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

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