为啥 Maven 使用 JDK 1.6 但我的 java -version 是 1.7
Posted
技术标签:
【中文标题】为啥 Maven 使用 JDK 1.6 但我的 java -version 是 1.7【英文标题】:Why Maven uses JDK 1.6 but my java -version is 1.7为什么 Maven 使用 JDK 1.6 但我的 java -version 是 1.7 【发布时间】:2013-09-19 18:22:11 【问题描述】:我是 maven 的新手,也是 MacOS 的新手。
我在终端中设置了 maven,在获取版本设置(使用 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"
【问题讨论】:
你能发布你的 PATH 和 JAVA_HOME 变量吗? @JeanneBoyarsky blues:helloworld Ninja$ echo $JAVA_HOME blues:helloworld Ninja$ echo $PATH /usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/ usr/local/git/bin @JeanneBoyarsky 这是您想要的吗,先生? 我是女性(所以称我为“先生”是不正确的),是的。请尝试设置您的 JAVA_HOME。您的问题似乎与此问题类似:***.com/questions/13752519/… @JeanneBoyarsky 请原谅我的粗鲁。你给的网址是我遇到的问题。非常感谢~ 【参考方案1】:将以下内容添加到您的~/.mavenrc
:
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-version/Contents/Home
第二种解决方案:
echo export "JAVA_HOME=\$(/usr/libexec/java_home)" >> ~/.bash_profile
【讨论】:
是的,您的回答是正确的。需要 JAVAHOME。我改为编辑 /etc/profile 好吧,添加到 ~/.mavenrc 可以确保其他应用程序不受影响。只有 mvn 选择了这个版本的 JDK。 :) 导出 JAVA_HOME=$(/usr/libexec/java_home -v 1.7) .mavenrc 解决方案非常适合我。还意识到我只安装了 JDK 1.8 而不是 JRE 1.8。谢谢高拉夫! 如果你在 mac 上使用 jenv,它可以是:export JAVA_HOME="$HOME/.jenv/versions/`jenv version-name`"
for ~/.mavenrc
文件。【参考方案2】:
进入
/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
现在它会立即生效。
【讨论】:
CurrentJDK 符号链接技巧似乎不再适用于 maven 3.3.1,但修改 ~/.mavenrc 可以。【参考方案3】:你也可以,
<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>
【讨论】:
如果 maven 使用 java 6 运行,这将不起作用。它只会与[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project projectname: Fatal error compiling: invalid target release: 1.7 -> [Help 1]
崩溃【参考方案4】:
你也可以明确地告诉 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 运行程序正在使用的默认编译器。
【讨论】:
哦,谢谢。但我还没有开始。我只是'mvn -v'...原因是我没有分配JAVA_HOME 请注意,这只影响您编译的代码。我遇到了这个问题并来到这里,因为我使用的一个外部库是为 Java 7 编译的,而 Maven 试图用 Java 6 运行它 如果 maven 使用 java 6 运行,这将不起作用。它只会与[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project projectname: Fatal error compiling: invalid target release: 1.7 -> [Help 1]
一起崩溃
这将在您的 IDE 中默认编译器的 maven 设置低于 1.7,但安装的 jdk 高于 1.7 时起作用【参考方案5】:
它帮助了我。只需将其添加到您的 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>
【讨论】:
【参考方案6】:对于 Eclipse 用户。 例如,如果您有一个运行配置可以清理包。
在“运行配置”面板中有一个 JRE 选项卡,您可以在其中指定它应该针对哪个运行时运行。 请注意,此配置会覆盖 pom.xml 中的任何内容。
【讨论】:
【参考方案7】:我迟到了这个问题,但我认为在 MacOS 上处理 JDK 版本的最佳方法是使用以下描述的脚本:http://www.jayway.com/2014/01/15/how-to-switch-jdk-version-on-mac-os-x-maverick/
【讨论】:
【参考方案8】:请检查兼容性。我与mvn 3.2.1
和jdk 1.6.0_37
斗争了好几个小时。所有变量均已设置但无法正常工作。最后我升级了jdk to 1.8.0_60
和mvn 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;
【讨论】:
【参考方案9】:@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
将 1.7 用于 Java 和 Maven。
【讨论】:
以上是关于为啥 Maven 使用 JDK 1.6 但我的 java -version 是 1.7的主要内容,如果未能解决你的问题,请参考以下文章
使用 Eclipse / Maven 构建 Hadoop - 缺少工件 jdk.tools:jdk.tools:jar:1.6
我的JDK版本是1.6的为啥我没有 javax.annotation.Resource这个包
eclipse的maven项目报Missing artifact jdk.toos:jdk.toos:jar:1.6错