在我的机器上,我安装了两个Java版本:(我手动安装的1.6和1.7)。我需要两个都用于不同的项目。但是对于Maven我需要1.7,现在我的Maven使用1,6 Java版本,如何设置Maven使用1.7?
在我的机器上,我安装了两个Java版本:(我手动安装的1.6和1.7)。我需要两个都用于不同的项目。但是对于Maven我需要1.7,现在我的Maven使用1,6 Java版本,如何设置Maven使用1.7?
Answers:
Maven使用该JAVA_HOME
参数查找应运行的Java版本。我从您的评论中看到,您无法在配置中进行更改。
JAVA_HOME
在启动Maven之前设置该参数(如果需要,可以在之后将其更改)。mvn
(非Windows)mvn.bat
// mvn.cmd
(Windows)并在那里明确设置Java版本。JAVA_HOME
在本地外壳程序中进行设置,而根本不更改计算机的配置(关闭该外壳程序后,更改就消失了)。您甚至可以通过单个命令更改它:JAVA_HOME=/path/to/jdk17/ mvn build
我们有一个很大的代码库,其中大多数是用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。
mvn2
并mvn3
定义了maven,而Java版本也开始发挥作用时,命名就会变得有些时髦...:D
alias mvn8 = "JAVA_HOME=`/usr/libexec/java_home -v 1.8` && mvn
&&
before mvn
。mvn看不到JAVA_HOME的值&&
。
在窗户上
如果您不想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
加我的两分钱,并明确提供解决方案。
我在Windows Machine JDK 1.5
和上安装了两个JDK JDK 1.6
。
我的默认值(并设置为Windows系统环境变量)JAVA_HOME
设置为JDK 1.5
。
但是,我有一个需要使用构建的Maven项目(即JBehave Tutorial的Etsy.com)JDK 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
mvn.bat
重命名为mvn.cmd
。
我刚刚在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时,有点像。
您可以使用带有的其他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>
您可以按照以下说明将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版本配置为任何项目,而不会遇到任何麻烦。
在不更改环境变量的情况下,您可以使用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>
另外,您可以安装两个版本的maven,并编辑其中一个,在此处进行编辑:
mvn(非Windows)/mvn.bat/mvn.cmd(Windows)
将%java_home%外观替换为Java所需的路径。然后只需从修改后的路径执行Maven