如何将特定的Java版本设置为Maven

and*_*Pat 138 maven java-6 java-7

在我的机器我安装了两个版本的Java:(1.6和1.7手动我安装).我需要他们两个不同的项目.但Maven的,我需要1.7,现在我的Maven使用1.6 Java版本,我怎么能设置的Maven使用1.7?

Dan*_*ian 114

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

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

  • @andPat:好吗?您可以在本地shell中设置`JAVA_HOME`,而无需更改机器的配置(只要关闭该shell,更改就会消失).您甚至可以为一个命令更改它:`JAVA_HOME =/path/to/jdk17/mvn build` (24认同)
  • 在 Mac 上,您可以创建一个 .mavenrc 文件,其中包含 JAVA_HOME (3认同)
  • 旧的,但投入了我的 2 美分。我正在开发由 Java 7 应用程序调用的 Java 8 服务。为了避免在构建时不断切换,我(在 Windows 上)创建了一个 MVN_JAVA_HOME 环境变量,然后在 mvn 和 mvn.cmd 中用 MVN_JAVA_HOME 替换每次出现的 JAVA_HOME。 (3认同)

Edw*_*oss 67

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

<project>
...
 <properties>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
  </properties>
...
</project>
Run Code Online (Sandbox Code Playgroud)

  • 从编译器插件版本3.7.0开始,如果未指定,则源和目标的默认值为1.5 (9认同)
  • 对于这些版本,您可以使用版本 9、10 11 而不是 1.X 吗? (2认同)

Jon*_*rum 40

为安装了多个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"
Run Code Online (Sandbox Code Playgroud)

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

  • 哇.这就是干净的杀手如何做到的.谢谢. (3认同)
  • 如果您使用的是 Mac,您的 JDK 带有 java_home 命令,因此您可以避免硬编码路径,例如 ```alias mvn8 = "JAVA_HOME=`/usr/libexec/java_home -v 1.8` &amp;&amp; mvn``` (3认同)
  • 我不认为工具链的答案总是更好。它需要摆弄项目 pom,如果您有很多和/或复杂的 Maven 项目,您可能不想这样做。这无需接触 poms 即可实现相同的效果。 (3认同)
  • 除非您需要为各种项目使用maven 2和3,否则您已经定义了`mvn2`和`mvn3`,并且当Java版本也开始发挥作用时,命名也变得有些时髦...:D (2认同)
  • 在(ubuntu + bash)上,您必须在`mvn`之前省略`&amp;&amp;`。mvn用`&amp;&amp;`看不到JAVA_HOME的值。 (2认同)

Jon*_*han 31

加上我的两分钱并明确提供解决方案.

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

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

但是,我有一个我需要构建的maven项目(即JBehave Tutorial的Etsy.com)使用JDK 1.6.

我在这种情况下的解决方案(工作正常!),如建议的@DanielBarbarian那样mvn.bat.

对于一些不熟悉窗口批处理文件的人,我基本上只是在(即)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
Run Code Online (Sandbox Code Playgroud)

  • 在maven 3.5中,`mvn.bat`被重命名为`mvn.cmd`. (4认同)

Ron*_*ere 31

在窗户上

如果您不想JAVA_HOME在系统变量中更改变量.

编辑您的mvn.bat文件并添加如下所示的行

set JAVA_HOME=C:\Program Files\Java\jdk1.7.0_45\jre
Run Code Online (Sandbox Code Playgroud)

这可以在@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`
Run Code Online (Sandbox Code Playgroud)

完整性检查

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

mvn -version

然后

java -version


Ond*_*ert 26

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

所以我在〜/ .m2 /文件夹中添加了一个toolchain.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>
Run Code Online (Sandbox Code Playgroud)

它允许您定义Maven可以使用哪些不同的JDK来构建项目,而不管JDK Maven运行的是什么.有点像在IDE中在项目级别定义JDK时.

  • 最好的答案!谢谢。这清楚地说明了我们要使用两个不同的Java运行时/框架来运行Maven和正在编译的项目的情况。 (2认同)

Tec*_*nic 10

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

我将文件内容更改为:

JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_45.jdk/Contents/Home
Run Code Online (Sandbox Code Playgroud)

对于 Linux 来说,它看起来像:

export JAVA_HOME=/usr/lib/jvm/java-8-oracle/jre
Run Code Online (Sandbox Code Playgroud)


Ran*_*uka 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 版本配置到任何项目,而不会出现任何问题。


小智 7

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

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


小智 6

该问题的一种简单解决方案 -

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

在 Mac 上,它看起来像 -

JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_21.jdk/Contents/Home/ mvn全新安装

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


Rus*_*lan 5

您可以配置编译使用不同的JDK源maven-compiler-plugin

只需指定javacin<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>
Run Code Online (Sandbox Code Playgroud)


Guo*_*ell 5

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

mvn11.cmd

@echo off
setlocal
set "JAVA_HOME=path\to\jdk11"
set "path=%JAVA_HOME%;%path%"
mvn %*
Run Code Online (Sandbox Code Playgroud)

那么你就可以使用mvn11在指定的JDK中运行Maven了。


Sav*_*ake 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>
Run Code Online (Sandbox Code Playgroud)

方法二

<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>
Run Code Online (Sandbox Code Playgroud)