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

时间:2013-10-29 09:41:04

标签: maven java-7 java-6

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

20 个答案:

答案 0 :(得分:95)

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

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

答案 1 :(得分:48)

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

<project>
...
 <properties>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
  </properties>
...
</project>

答案 2 :(得分:33)

为安装了多个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版本。

答案 3 :(得分:30)

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

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

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

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

我在这种情况下的解决方案(有效!),正如@DanielBarbarian建议的那样,可以在mvn.bat中进行设置。

对于一些不熟悉窗口批处理文件的人,我基本上在set JAVA_HOME=<path_to_other_jdk> @REM ==== START VALIDATION ====之后添加了mvn.bat行(即%MAVEN_HOME%\bin\mvn.bat):< / p>

@REM ==== START VALIDATION ====
set JAVA_HOME=C:\Program Files\Java\jdk1.6.0_45\jre
if not "%JAVA_HOME%" == "" goto OkJHome

答案 4 :(得分:27)

在Windows上

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

修改您的mvn.bat文件,然后添加一行

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

这可以在@Jonathan

提及的@REM ==== START VALIDATION ====之后完成

在Mac上(&amp; Linux?)

如果您不想更改JAVA_HOME~/.bashrc

中的~/.bash_profile变量

您可以创建~/.mavenrc文件并使用java_home tool重新定义JAVA_HOME

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

完整性检查

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

mvn -version

然后

java -version

答案 5 :(得分:20)

我最近在与Maven长达七年之后,了解了toolchains.xml。 Maven甚至记录了它,并从2.0.9 - toolchains documentation

支持它

所以我在〜/ .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>

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

答案 6 :(得分:3)

为了避免对您的项目和环境变量产生任何影响,您可以只为项目的POM配置Maven编译器插件,指定源和目标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>

答案 7 :(得分:3)

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

  

JAVA_HOME = / usr / lib / jvm / java-6-sun / mvn clean install

在Mac上,它看起来像 -

  

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

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

答案 8 :(得分:1)

最近安装了 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/mvnfile如下

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

答案 9 :(得分:1)

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

在您的计算机link中安装jenv

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

  

jenv版本

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

  

jenv全局oracle64-1.6.0.39

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

  

jenv本地oracle64-1.7.0.11

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

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

  

jenv enable-plugin maven

现在,您可以毫无问题地将计算机中的任何Java版本配置为任何项目。

答案 10 :(得分:1)

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

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

答案 11 :(得分:0)

  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_HOME 被许多基于 Java 的应用程序使用来定义 Java 运行时环境 (JRE) 的安装位置。 M2_HOME 被 Maven 使用,它再次告诉程序在哪里可以找到 Maven 安装。

答案 12 :(得分: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

答案 13 :(得分:0)

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

答案 14 :(得分:0)

在不更改环境变量的情况下,您可以使用Maven编译器插件基于项目级别管理Java版本。

方法1

<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>

方法2

<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>

答案 15 :(得分:0)

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

mvn11.cmd

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

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

答案 16 :(得分:0)

您可以使用maven-compiler-plugin配置compiling sources using different JDK

只需在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>

答案 17 :(得分:0)

在Mac上仅通过在控制台中设置JAVA_HOME并没有成功,但是通过这种方法我成功了

  • 在您的主目录中创建.mavenrc文件(因此该文件的路径将为~/.mavenrc
  • export JAVA_HOME=$(/usr/libexec/java_home -v 1.7)粘贴到该文件中

答案 18 :(得分:0)

还可以安装两个版本的maven,并编辑其中的一个,在此处进行编辑:

  

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

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

答案 19 :(得分:0)

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

front

Where to add JAVA_HOME and MAVEN path variables in linux