如何设置特定的Java版本到Maven

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

Maven使用JAVA_HOME参数来查找它应该运行的Java版本。 我从你的评论中看到,你不能在configuration中改变它。

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

添加我的两分钱,并明确提供解决scheme。

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

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

不过,我有一个使用JDK 1.6构build的Maven项目(即JBehave Tutorial的Etsy.com )。

我在这种情况下的解决scheme(工作!),是由@DanielBarbarianbuild议在mvn.bat设置。

对于一些不熟悉窗口的batch file,我只是在mvn.bat (即%MAVEN_HOME%\bin\mvn.bat添加了@REM ==== START VALIDATION ====之后的set JAVA_HOME=<path_to_other_jdk> ):

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

在窗户上

如果你不想在系统variables里面改变你的JAVA_HOMEvariables。

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

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

这可以在@REM ==== START VALIDATION ====之后完成,就像@Jonathan提到的一样

在Mac(&Linux?)上

如果您不想在~/.bashrc~/.bash_profile更改JAVA_HOMEvariables

你可以创build一个~/.mavenrc文件并使用java_home工具重新定义你的JAVA_HOME

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

完整性检查

您可以通过执行以下命令来validation一切工作正常。 jdk版本应该是不同的。

mvn -version

然后

java -version

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

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

我最近在与Maven合作七年之后,了解了toolchains.xml。 Maven甚至已经logging并支持2.0.9 – 工具链文档

所以我添加了一个toolchain.xml文件到我的〜/ .m2 /文件夹中,内容如下:

 <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构build项目,而不pipe运行的是JDK Maven。 有点像在IDE中定义项目级别的JDK时。

为安装了多个Java版本的人员添加解决scheme

我们有一个很大的代码库,其中大部分是用Java编写的。 我所做的大部分工作都是用Java 1.7或1.8编写的。 由于JAVA_HOME是静态的,我在我的.bashrc创build了用于运行具有不同值的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版本如何。

为了避免对你的项目和你的环境variables产生任何影响,你可以将Maven编译器插件configuration到项目的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> 

一个简单的解决scheme –

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

在Mac上,它看起来像 –

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

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