在我的机器上我安装了两个java版本:(1.6和1.7由我手动安装)。我需要他们两个不同的项目。但是对于Maven我需要1.7,现在我的Maven使用了1.6个java版本,我如何设置Maven使用1.7?
Maven使用JAVA_HOME
参数来查找它应该运行的Java版本。我从您的评论中看到,您无法在配置中更改它。
JAVA_HOME
参数(如果需要,可以在之后将其更改)。mvn
(非windows)/ mvn.bat
/ mvn.cmd
(windows)并在那里明确设置你的java版本。在Linux / Unix上,'mvn'hell脚本中的JAVA_HOME被设置覆盖
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5.1</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
...
</plugins>
请link
您也可以安装两个版本的maven,并编辑其中一个版本,在此处进行编辑:
行家(非视窗)/mvn.bat/mvnw.cmd(视窗)
将%java_home%外观替换为java所需路径。然后只需从修改后的路径执行maven
我在mac上没有成功,只是在控制台中设置了$HOME/.mavenrc
但我用这种方法成功了
JAVA_HOME
你可以用~/.mavenrc
配置export JAVA_HOME=$(/usr/libexec/java_home -v 1.7)
。
只需在compiling sources using different JDK标签中指定maven-compiler-plugin
的路径即可。例如,对于java11,它看起来像:
javac
在Windows上,我只是将不同JDK版本的多个批处理文件添加到Maven bin文件夹,如下所示:
mvn11.cmd
<executable>
然后你可以使用<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>
在指定的JDK中运行Maven。
在POM中,您可以设置编译器属性,例如为1.8:
<project>
...
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
...
</project>
我们有一个很大的代码库,其中大部分是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版本如何。
加上我的两分钱并明确提供解决方案。
我的Windows机器上安装了两个JDK - qazxsw poi和qazxsw poi。
我的默认值(并设置为windows系统环境变量)JDK 1.5
设置为JDK 1.6
。
但是,我需要使用JAVA_HOME
构建一个maven项目(即JDK 1.5
)。
我在这个场景中的解决方案(有效!),正如JBehave Tutorial's 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
文件并添加如下所示的行
JAVA_HOME
这可以在@Jonathan提到的mvn.bat
之后完成
在Mac上(&Linux?)
如果您不想在set JAVA_HOME=C:\Program Files\Java\jdk1.7.0_45\jre
或@REM ==== START VALIDATION ====
中更改JAVA_HOME
变量
你可以创建一个~/.bashrc
文件并使用~/.bash_profile
重新定义你的~/.mavenrc
JAVA_HOME
完整性检查
您可以通过执行以下命令来验证一切正常。 jdk版本应该是不同的。
然后
export JAVA_HOME=`/usr/libexec/java_home -v 1.7.0_45`
我最近在与Maven长达七年之后,了解了toolchains.xml。 Maven甚至记录了它并从2.0.9开始支持它 - mvn -version
所以我在〜/ .m2 /文件夹中添加了一个toolchain.xml文件,其中包含以下内容:
java -version
它允许您定义Maven可以使用哪些不同的JDK来构建项目,而不管JDK Maven运行的是什么。有点像在IDE中在项目级别定义JDK时。
为了避免对项目和环境变量产生任何影响,您可以只为项目的POM配置Maven编译器插件,指定源和目标java版本
toolchains documentation
解决问题的一个简单方法 -
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。
您可以按照以下说明将Maven设置为使用任何Java版本。
在您的机器<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>
中安装jenv
通过在命令行中发出以下命令,检查计算机中安装的可用Java版本。
jenv版本
您可以使用以下命令指定全局Java版本。
jenv global oracle64-1.6.0.39
您可以在命令行的目录中使用以下命令为任何目录(Project)指定本地Java版本。
jenv local oracle64-1.7.0.11
在pom.xml中添加正确的java版本
如果你在命令行中运行maven使用下面的命令安装jenv maven插件
jenv enable-plugin maven
现在,您可以将计算机中的任何Java版本配置为任何项目而不会出现任何问题。