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

如何将Maven设置为使用1.7?


当前回答

在Linux/Unix上,“mvn”shell脚本中的JAVA_HOME会被中的设置覆盖

$HOME/.mavenrc

在linux中添加JAVA_HOME和MAVEN路径变量

其他回答

设置Java默认版本 您的系统上可能有两个不同版本的Java。要设置一个为默认值,使用命令:

Sudo选项——配置Java

系统显示不同Java版本的列表。如果您喜欢默认设置,请按Enter。

如果您想更改它,输入您想要的版本号,然后按Enter。

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

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

编辑:

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-compiler-plugin使用不同的JDK配置编译源。

只需在<executable>标签中指定路径到javac。例如,对于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>