为什么 Maven 使用 JDK 1.6而我的 java 版本是1.7

我是 Maven 的新手,也是 MacOS 的新手。

我在终端中安装了安装专家,当获得版本设置(使用 mvn -v)时,它似乎使用了 JDK 1.6,而我安装的是 JDK 1.7。有什么问题吗?

我输入的命令如下:

blues:helloworld Ninja$ java -version
java version "1.7.0_05"
Java(TM) SE Runtime Environment (build 1.7.0_05-b06)
Java HotSpot(TM) 64-Bit Server VM (build 23.1-b03, mixed mode)`
blues:helloworld Ninja$ mvn -v
Apache Maven 3.1.0 (893ca28a1da9d5f51ac03827af98bb730128f9f2; 2013-06-28 10:15:32+0800)
Maven home: /usr/local/Cellar/maven/3.1.0/libexec
Java version: 1.6.0_51, vendor: Apple Inc.
Java home: /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
Default locale: zh_CN, platform encoding: EUC_CN
OS name: "mac os x", version: "10.8.4", arch: "x86_64", family: "mac"
143207 次浏览

您还可以显式地告诉 maven 要为哪个 java 版本编译。您可以尝试将 maven-compiler-plugin添加到您的 POM 中。

<project>
[...]
<build>
[...]
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
</plugins>
[...]
</build>
[...]
</project>

如果您将一个 maven 项目导入到 IDE 中,那么您的 IDE 中可能存在一个 maven 运行程序正在使用的默认编译器的 maven 设置。

在你的 ~/.mavenrc中加入以下内容:

export JAVA_HOME=/Library/Java/JavaVirtualMachines/{jdk-version}/Contents/Home

第二个解决方案:

echo export "JAVA_HOME=\$(/usr/libexec/java_home)" >> ~/.bash_profile

进去

/System/Library/Frameworks/JavaVM.framework/Versions

并更新指向的 CurrentJDK符号链接

/Library/Java/JavaVirtualMachines/YOUR_JDK_VERSION/Contents/

例如。

cd /System/Library/Frameworks/JavaVM.framework/Versions
sudo rm CurrentJDK
sudo ln -s /Library/Java/JavaVirtualMachines/jdk1.8.0.jdk/Contents/ CurrentJDK

现在它马上就能起作用了。

你也可以,

<properties>
...


<!-- maven-compiler-plugin , aka JAVA Compiler 1.7 -->
<maven.compiler.target>1.7</maven.compiler.target>
<maven.compiler.source>1.7</maven.compiler.source>


...
</properties>

对于这个问题,我已经迟到了,但是我认为在 MacOS 上处理 JDK 版本的最佳方法是使用 http://www.jayway.com/2014/01/15/how-to-switch-jdk-version-on-mac-os-x-maverick/中描述的脚本

对于 Eclipse 用户。 如果您有一个运行配置,做干净的包,例如。

在 Run Configuration 面板中有一个 JRE 选项卡,您可以在其中指定它应该针对哪个运行时运行。 注意,这个配置覆盖 pom.xml 中的任何内容。

请检查兼容性。我与 mvn 3.2.1jdk 1.6.0_37搏斗了好几个小时。所有变量都已设置,但无法工作。最后,我升级了 jdk to 1.8.0_60mvn 3.3.3,它们起作用了。环境变量如下:

JAVA_HOME=C:\ProgramFiles\Java\jdk1.8.0_60
MVN_HOME=C:\ProgramFiles\apache-maven\apache-maven-3.3.3
M2=%MVN_HOME%\bin extend system level Path- ;%M2%;%JAVA_HOME%\bin;

@ MasterGaurav 的解决方案完美无缺。

我通常将 Java switch 语句放到 zsh 函数中:

alias java_ls='/usr/libexec/java_home -V 2>&1 | grep -E "\d.\d.\d[,_]" | cut -d , -f 1 | colrm 1 4 | grep -v Home'


function java_use() {
export JAVA_HOME=$(/usr/libexec/java_home -v $1)
echo export "JAVA_HOME=$(/usr/libexec/java_home -v $1)" > ~/.mavenrc
export PATH=$JAVA_HOME/bin:$PATH
java -version
}

您可以运行 java_ls来获取计算机上所有可用的 JVM,
然后 java_use 1.7对 Java 和 Maven 都使用1.7。

它帮助了我,只要把它添加到 pom.xml 中。

默认情况下,maven 编译器插件使用 Java 1.5或1.6,必须在 pom.xml 中重新定义它。

<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>