在我的机器上我安装了两个java版本:(1.6和1.7由我手动安装)。我需要他们两个不同的项目。但是对于Maven我需要1.7,现在我的Maven使用了1.6个java版本,我如何设置Maven使用1.7?
答案 0 :(得分:95)
Maven使用JAVA_HOME
参数来查找它应该运行的Java版本。我从您的评论中看到,您无法在配置中更改它。
JAVA_HOME
参数(如果需要,可以在之后将其更改)。 mvn
(非Windows)/ mvn.bat
/ mvn.cmd
(窗口)并在那里明确设置您的Java版本。答案 1 :(得分:48)
在POM中,您可以设置编译器属性,例如对于1.8:
<project>
...
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
...
</project>
答案 2 :(得分:33)
我们有一个很大的代码库,其中大部分是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版本。
答案 3 :(得分:30)
加上我的两分钱并明确提供解决方案。
我的Windows机器上安装了两个JDK - JDK 1.5
和JDK 1.6
。
我的默认设置(并设置为windows系统环境变量)JAVA_HOME
设置为JDK 1.5
。
但是,我需要使用JDK 1.6
构建一个maven项目(即JBehave Tutorial's Etsy.com)。
我在这种情况下的解决方案(有效!),正如@DanielBarbarian
建议的那样,可以在mvn.bat
中进行设置。
对于一些不熟悉窗口批处理文件的人,我基本上在set JAVA_HOME=<path_to_other_jdk>
@REM ==== START VALIDATION ====
之后添加了mvn.bat
行(即%MAVEN_HOME%\bin\mvn.bat
):< / p>
@REM ==== START VALIDATION ====
set JAVA_HOME=C:\Program Files\Java\jdk1.6.0_45\jre
if not "%JAVA_HOME%" == "" goto OkJHome
答案 4 :(得分:27)
在Windows上
如果您不想更改系统变量中的JAVA_HOME
变量。
修改您的mvn.bat
文件,然后添加一行
set JAVA_HOME=C:\Program Files\Java\jdk1.7.0_45\jre
这可以在@Jonathan
提及的@REM ==== START VALIDATION ====
之后完成
在Mac上(&amp; Linux?)
如果您不想更改JAVA_HOME
或~/.bashrc
~/.bash_profile
变量
您可以创建~/.mavenrc
文件并使用java_home tool重新定义JAVA_HOME
export JAVA_HOME=`/usr/libexec/java_home -v 1.7.0_45`
完整性检查
您可以通过执行以下命令来验证一切正常。 jdk版本应该不同。
mvn -version
然后
java -version
答案 5 :(得分:20)
我最近在与Maven长达七年之后,了解了toolchains.xml。 Maven甚至记录了它,并从2.0.9 - toolchains documentation
支持它所以我在〜/ .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 Maven运行的是什么。有点像在IDE中在项目级别定义JDK时那样。
答案 6 :(得分:3)
为了避免对您的项目和环境变量产生任何影响,您可以只为项目的POM配置Maven编译器插件,指定源和目标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>
答案 7 :(得分:3)
解决问题的一个简单方法 -
JAVA_HOME = / usr / lib / jvm / java-6-sun / mvn clean install
在Mac上,它看起来像 -
PS:我发现的一个特殊情况是上面给出的命令对'fish'shell不起作用。我也有bash shell可用,它在那里工作得很好。只需使用命令'bash'切换到bash shell。JAVA_HOME = / Library / Java / JavaVirtualMachines / jdk1.7.0_21.jdk / Contents / Home / mvn clean install
答案 8 :(得分:1)
最近安装了 Java10,看看它有什么新东西和乐趣。一旦我这样做并尝试运行使用java8的现有项目。
令我惊讶的是,Maven 开始使用 java10 作为其默认 Java 版本,即使我的 JAVA_HOME 设置为使用 java8 — /usr/libexec/java_home -v 1.8
鉴于,我的安装是使用 brew 完成的——Brew 只是 Mac OS 的一个包管理器,我的 M2_HOME 是自动设置的。这通常在 /usr/local/Cellar/maven/3.5.4
有了这个新发现的知识,我跑了
nano /usr/local/Cellar/maven/3.5.4/bin/mvn
内容是
#!/bin/bash
JAVA_HOME="${JAVA_HOME:-$(/usr/libexec/java_home)}" exec "/usr/local/Cellar/maven/3.5.4/libexec/bin/mvn" "$@"
重要的一点
"${JAVA_HOME:-$(/usr/libexec/java_home)}"
要解决此问题,您需要指定 maven 默认使用的 Java 版本。所以就我而言,我需要 java8。
更新/usr/local/Cellar/maven/3.5.4/bin/mvnfile
如下
#!/bin/bash
JAVA_HOME="${JAVA_HOME:-$(/usr/libexec/java_home -v 1.8)}" exec "/usr/local/Cellar/maven/3.5.4/libexec/bin/mvn" "$@"
答案 9 :(得分:1)
您可以按照以下说明将Maven设置为使用任何Java版本。
在您的计算机link中安装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版本配置为任何项目。
答案 10 :(得分:1)
在Mac上,(假设您安装了正确的版本)
JAVA_HOME=`/usr/libexec/java_home -v 1.8` mvn clean install -DskipTests
答案 11 :(得分:0)
vi ~/.bash_profile
wq!
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_211.jdk/Contents/Home
export M2_HOME=/Users/mj/Tools/apache-maven-3.8.1
运行 source ~/.bash_profile
让它永远工作
之后,您可以在终端中运行 mvn -v
来检查
Maven home: /Users/mj/Tools/apache-maven-3.8.1
Java version: 1.8.0_211, vendor: Oracle Corporation,
runtime: /Users/mj/Tools/jdk1.8.0_211.jdk/Contents/Home/jre
Default locale: en_CN, platform encoding: UTF-8
OS name: "mac os x", version: "10.16", arch: "x86_64", family: "mac"
如果你想知道为什么,请阅读下面
JAVA_HOME 被许多基于 Java 的应用程序使用来定义 Java 运行时环境 (JRE) 的安装位置。 M2_HOME 被 Maven 使用,它再次告诉程序在哪里可以找到 Maven 安装。
答案 12 :(得分:0)
我正在使用 jenv 并面临“javax.xml.bind.annotation”的编译错误,因为终端中的 mvn 使用的是 openjdk 13
Maven home: /usr/local/Cellar/maven/3.6.3_1/libexec
Java version: 13.0.2, vendor: N/A, runtime: /usr/local/Cellar/openjdk/13.0.2+8_2/libexec/openjdk.jdk/Contents/Home
对我来说,它在按照此处的建议运行“jenv enable-plugin maven”后工作 https://stackoverflow.com/a/56487374/1582473
答案 13 :(得分:0)
我使用了@Jonathan的基本想法。 我用以下方法设置了窗口:set JAVA_HOME = C:\ Program Files \ java \ AdoptOpenJDK-11.0.8 + 10 调用mvn clean package -DskipTests
答案 14 :(得分:0)
在不更改环境变量的情况下,您可以使用Maven编译器插件基于项目级别管理Java版本。
方法1
<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>
方法2
<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>
答案 15 :(得分:0)
在Windows上,我只是将不同JDK版本的多个批处理文件添加到Maven bin文件夹中,如下所示:
mvn11.cmd
@echo off
setlocal
set "JAVA_HOME=path\to\jdk11"
set "path=%JAVA_HOME%;%path%"
mvn %*
然后,您可以使用mvn11
在指定的JDK中运行Maven。
答案 16 :(得分:0)
您可以使用maven-compiler-plugin
配置compiling sources using different JDK。
只需在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>
答案 17 :(得分:0)
在Mac上仅通过在控制台中设置JAVA_HOME
并没有成功,但是通过这种方法我成功了
~/.mavenrc
export JAVA_HOME=$(/usr/libexec/java_home -v 1.7)
粘贴到该文件中答案 18 :(得分:0)
还可以安装两个版本的maven,并编辑其中的一个,在此处进行编辑:
mvn(非Windows)/mvn.bat/mvn.cmd(Windows)
将%java_home%外观替换为Java所需的路径。然后只需从修改后的路径执行maven
答案 19 :(得分:0)
在Linux / Unix上,“ mvn” shell脚本中的JAVA_HOME被设置中的设置覆盖
front