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


162

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


我无法使用Java 1.7导出JAVA_HOME,因为无法触摸计算机的配置,Java的默认版本必须为1.6。
andPat

Maven使用JAVA_HOME,因此不要更改JAVA_HOME值就可以实现您想做的事情。
Zyga 2013年

1
您在使用IDE还是命令行?您是在* nix还是Windows上?
xwoker 2013年

1
这个答案能满足您的要求吗?stackoverflow.com/a/4724062/1570834
DB5

是的是有用的,但我无法更改项目的pom,尽管如此,内容相同并且答案是正确的
andPat

Answers:


137

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

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

29
@andPat:是吗?您可以JAVA_HOME在本地外壳程序中进行设置,而根本不更改计算机的配置(关闭该外壳程序后,更改就消失了)。您甚至可以通过单个命令更改它:JAVA_HOME=/path/to/jdk17/ mvn build
Joachim Sauer 2013年

@JoachimSauer:是的,但是我也参考了Windows特有的mvn.bat。
DanielBarbarian 2013年

在Mac上,您可以使用JAVA_HOME创建一个.mavenrc文件
Ronan Quillevere15年

旧的,但是扔了我的2cents。我正在研究Java 7应用程序调用的Java 8服务。为了避免在构建时不断切换,我(在Windows上)创建了MVN_JAVA_HOME环境变量,然后在mvn和mvn.cmd中用MVN_JAVA_HOME替换每次出现的JAVA_HOME。
ryanlutgen '16

74

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

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

9
从3.7.0版开始,如果未指定,source和target的默认值为1.5
Crowne

58

为安装了多个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"

这样,无论项目中使用的JDK版本如何,我都可以在开发机器上从命令行运行Maven。


2
除非您需要为各种项目使用maven 2和3,否则您已经拥有mvn2mvn3定义了maven,而Java版本也开始发挥作用时,命名就会变得有些时髦...:D
Tomislav Nakic-Alfirevic

3
如果您使用的是Mac,则JDK附带了java_home命令,因此可以避免对路径进行硬编码,例如alias mvn8 = "JAVA_HOME=`/usr/libexec/java_home -v 1.8` && mvn
ptkvsk

5
在(ubuntu + bash)上,您必须省略&&before mvn。mvn看不到JAVA_HOME的值&&
法宾(Fabien)

@Fabien很高兴知道;我使用ZSH,但不了解Bash的区别
Jonathan Landrum,

47

在窗户上

如果您不想JAVA_HOME在系统变量内更改变量。

编辑mvn.bat文件并添加这样的行

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

可以@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`

完整性检查

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

mvn -version

然后

java -version


我将其设置为设置JAVA_HOME = C:\ Program Files \ Java \ jdk1.7.0_45排除的jre子文件夹。
nanosoft '16

32

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

我在Windows Machine JDK 1.5和上安装了两个JDK JDK 1.6

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

但是,我有一个需要使用构建的Maven项目(即JBehave Tutorial的Etsy.comJDK 1.6

在这种情况下,我的解决方案(有效!)是根据的建议@DanielBarbarian设置的mvn.bat

对于一些不熟悉window的批处理文件的人,我基本上只是set JAVA_HOME=<path_to_other_jdk>@REM ==== START VALIDATION ====in 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

4
在maven 3.5中,mvn.bat重命名为mvn.cmd
CKM

30

我刚刚在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>

它使您可以定义Maven可以使用哪些不同的JDK来构建项目,而与运行的JDK无关。在IDE中在项目级别定义JDK时,有点像。


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

5

一种简单的解决方案-

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

在Mac上,看起来像-

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

PS:我发现的一种特殊情况是上面给定的命令在'fish'shell上不起作用。我也有bash shell可用,并且在那里工作良好。只需使用命令“ bash”切换到bash shell。


5

您可以使用带有的其他JDK配置编译源maven-compiler-plugin

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

4

为了避免对您的项目和环境变量造成任何影响,您可以仅将Maven编译器插件配置为项目的POM,并指定Source和Target 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>

4

您可以按照以下说明将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 enable-plugin Maven

现在,您可以将计算机中的任何Java版本配置为任何项目,而不会遇到任何麻烦。


1
喜欢这个选项。jenv就像适用于python的virtualenv
Jesse Zhuang

4

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

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


4

在不更改环境变量的情况下,您可以使用Maven编译器插件根据项目级别管理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>

方法二

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

2

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

mvn11.cmd

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

那么您就可以mvn11在指定的JDK中运行Maven。



1

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

  • 在您的主目录下创建.mavenrc文件(因此该文件的路径将是 ~/.mavenrc
  • 放入那个文件粘贴 export JAVA_HOME=$(/usr/libexec/java_home -v 1.7)

0

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

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.