如何设置特定的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.5
和JDK 1.6
。
我的默认(并设置为windows系统环境variables) JAVA_HOME
设置为JDK 1.5
。
不过,我有一个使用JDK 1.6
构build的Maven项目(即JBehave Tutorial的Etsy.com )。
我在这种情况下的解决scheme(工作!),是由@DanielBarbarian
build议在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_HOME
variables。
编辑你的mvn.bat
文件并添加一行这样的
set JAVA_HOME=C:\Program Files\Java\jdk1.7.0_45\jre
这可以在@REM ==== START VALIDATION ====
之后完成,就像@Jonathan提到的一样
在Mac(&Linux?)上
如果您不想在~/.bashrc
或~/.bash_profile
更改JAVA_HOME
variables
你可以创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。