升级到Java8后,javac仍然显示1.7

Posted

技术标签:

【中文标题】升级到Java8后,javac仍然显示1.7【英文标题】:After upgrading to Java8, javac still shows 1.7 【发布时间】:2014-06-05 19:40:39 【问题描述】:

我在 OSX 上从 JDK 1.7 -> 1.8 升级时遇到问题。升级已完成,但 javac 仍返回 1.7 作为版本。

我已经从 Oracle 主页下载了JDK 8_u5,然后运行安装程序。

我还采取了以下步骤,安装后:

> export JAVA_HOME=`/usr/libexec/java_home -v 1.8`  (Executed in my .bashrc file)

> echo $JAVA_HOME
/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home

> javac -version
javac 1.7.0_21

> $JAVA_HOME/bin/javac -version
javac 1.7.0_21

> $JAVA_HOME/bin/java -version    
java version "1.8.0_05"
Java(TM) SE Runtime Environment (build 1.8.0_05-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.5-b02, mixed mode)

我已经完成并删除了 Java 1.7(和所有其他 JDK 版本),然后重新运行安装程序:

> ls /Library/Java/JavaVirtualMachines
jdk1.8.0_05.jdk

还是没用,javac报告版本为1.7.0_21

> which javac
/usr/bin/javac

> ls -ltra /usr/bin/javac 
[snipped] /usr/bin/javac -> /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/javac

在该路径中,Current 是指向A 的符号链接。 A/Commands 的内容是一系列文件(不是符号链接)。

> cd A/Commands
> ./javac -version
javac 1.7.0_21

> ./java -version
java version "1.8.0_05"
Java(TM) SE Runtime Environment (build 1.8.0_05-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.5-b02, mixed mode)

编辑

根据this answer 的建议,我对jenv 做了一些挖掘工作。

> jenv add /Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home                 
> jenv global oracle64-1.8.0.05
> jenv version
oracle64-1.8.0.05 (set by /Users/martypitt/.jenv/version)

> jenv info java 
Jenv will exec : /Users/martypitt/.jenv/versions/oracle64-1.8.0.05/bin/java

> jenv info javac
Jenv will exec : /Users/martypitt/.jenv/versions/oracle64-1.8.0.05/bin/javac

> javac -version
javac 1.7.0_21

这分散了我的想法,即这是潜伏在我的路径中的随机 javac,不知何故被调用。

可以肯定的是,我已经彻底破解了我的 Java,并再次尝试:

> cd /Library/Java/JavaVirtualMachines
> ls 
jdk1.7.0_55.jdk 
jdk1.8.0_05.jdk
> sudo rm -rf *  
> ls
<<empty>>
> java -version
java version "1.6.0_65"
> javac -version
javac 1.6.0_65
> which javac
/usr/bin/javac

然后我重新下载了fresh copy the installer 并运行它。

> java -version
java version "1.8.0_05"
> javac -version
javac 1.7.0_21

更新

我尝试删除所有 JDK、XCode 和所有开发人员工具,然后重新安装。 结果相同。

但是,我仍然不知所措——我该去哪里?如何安装 javac 1.8?

【问题讨论】:

不确定这是否有帮助,但尝试卸载与 JDK/JRE 相关的所有内容并尝试全新安装 JDK/JRE 参考 askubuntu.com/questions/84483/how-to-completely-uninstall-java 你能试试/usr/libexec/java_home -v 1.8.0_05 --exec javac -version吗? @AnthonyAccioly 逐字逐句执行您的命令:javac 1.7.0_21 @VD' :我试过了,从我的机器上删除了所有 JDK。我还应该采取其他步骤吗? 只是为了确定,您可以删除 jdk 1.8 并重试吗?如果它仍然找到 javac 1.7.0,那么你的 PATH 有一些奇怪的东西,否则它可能是@skiwi 建议的情况(不幸的是我无法重现)。 【参考方案1】:

如果/usr/libexec/java_home -v 1.8.0_05 --exec javac -version 返回正确的版本,那么您的问题在于:

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

使用特权用户执行:

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

解决方案位于 Mankeh Blog


还要检查超级用户上的this answer 以动态切换 JDK 版本。


更新:我想我找到了罪魁祸首!

试试这个:

rm -rf ~/Library/Java/Extensions
sudo rm -rf /Library/Java/Extensions

解决方案位于: Java 1.7 on OSX 10.9.2 running as 1.5?

【讨论】:

谢谢安东尼。不幸的是:/usr/libexec/java_home -v 1.8.0_05 --exec javac -version 返回javac 1.7.0_21 很高兴为您服务。我的头韵像素化版本说“感谢美味的赏金”。真实的我说:“如果你来巴西,让我们喝杯啤酒,谈谈在 OS X 中永久放弃 Java 开发!”当 Apple 开始丢球时我就这么做了——当然在 Oracle 能够接球之前——现在我是一个非常快乐的 openSUSE 用户,我不能抱怨任何事情!真的!它只是工作! 感谢巴西人,为我工作,可惜巴西在世界杯上以 1-7 输掉了比赛。我是巴西足球的忠实粉丝。 为我解决这个问题! rm -rf ~/Library/Java/Extensions sudo rm -rf /Library/Java/Extensions 谢谢!!!! ~/Library/Java/Extensions /Library/Java/Extensions【参考方案2】:

对于 Windows 用户:

有可能,您必须更改 PATH 变量。 尝试将“%JAVA_HOME%/bin”设置为 PATH 中的第一个条目。

所以现在看起来像这样:

 PATH    C:\Program Files\anyprogram;C:\Program Files\...;%JAVA_HOME%\bin

然后你像这样改变它:

 PATH    %JAVA_HOME%\bin;C:\Program Files\anyprogram;C:\Program Files\...

原因:任何其他程序首先启动其他 Java 版本。

【讨论】:

【参考方案3】:

这(很可能)是 jre8 安装过程中的一个错误。

导航到我的 jre8 文件夹时,我得到了完全相同的行为,这是 Windows(在我的情况下)默认显示的文件夹:

java版本:1.8.0,运行环境1.8.0-b132,热点64位JVM 25.0-b70 javac 版本:1.7.0_25

导航到jdk8目录时,显示如下:

java版本:1.8.0,运行环境1.8.0-b132,热点64位JVM 25.0-b70 javac 版本:1.8.0

我刚刚注意到,虽然 jre 从来没有发布过 javac,所以我猜这是操作系统中的参考设置中的一个问题。

要修复它,您需要手动修复操作系统中的 javac 引用。

【讨论】:

谢谢——我怀疑根本原因是一样的(javac somewhere)。 OSX 和 Windows 中的文件夹结构非常不同。 OSX 将其 JDK 文件(以及指向这些文件的指针)分散在各处,因此没有 jdk8 目录。 javac 不在 JRE 文件夹中是有道理的,因为它是 JDK 的一部分,而不是 JRE。 除此之外,我对javac 正在解析的路径进行了更多调查。根据问题中的更新信息,我确信正在执行的 javacjdk8 路径中的那个。我确信它与 jdk8 附带的相同,但除了运行 vanilla 安装之外,我没有做任何事情。奇数。【参考方案4】:

也许您可以删除类路径中的标准 .jar 文件。当我删除/Library/Java/Extensions中的jar时,问题就解决了。 更多信息 : Java compilation error: Mac

【讨论】:

这包含在After upgrading to Java8, javac still shows 1.7【参考方案5】:

只是在这里添加我自己的经验,我从Oracle安装了jdk-8u131-macosx-x64。一切都很完美。不存在或不需要 JAVA_HOME 环境变量。

mehboob$ javac -version
javac 1.8.0_131

mehboob$ java -version
java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)

/System/Library 显示如下:

mehboob$ ls -l /System/Library/Frameworks/JavaVM.framework/Versions/
total 64
lrwxr-xr-x  1 root  wheel   10 Oct 17  2013 1.4 -> CurrentJDK
lrwxr-xr-x  1 root  wheel   10 Oct 17  2013 1.4.2 -> CurrentJDK
lrwxr-xr-x  1 root  wheel   10 Oct 17  2013 1.5 -> CurrentJDK
lrwxr-xr-x  1 root  wheel   10 Oct 17  2013 1.5.0 -> CurrentJDK
lrwxr-xr-x  1 root  wheel   10 Oct 17  2013 1.6 -> CurrentJDK
lrwxr-xr-x  1 root  wheel   10 Oct 17  2013 1.6.0 -> CurrentJDK
drwxr-xr-x  8 root  wheel  272 Sep  9  2014 A
lrwxr-xr-x  1 root  wheel    1 Oct 17  2013 Current -> A
lrwxr-xr-x  1 root  wheel   59 Oct 17  2013 CurrentJDK -> /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents

虽然 /Library/Java 有这个:

mehboob$ ls -l /Library/Java/
total 8
drwxrwxr-x  2 root  admin   68 Oct 17  2013 Extensions
lrwxr-xr-x  1 root  wheel   48 Oct 17  2013 Home -> /System/Library/Frameworks/JavaVM.framework/Home
drwxr-xr-x  3 root  wheel  102 Jun  9 11:43 JavaVirtualMachines

Extensions 中什么都没有,而 JavaVirtualMachines 只有 jdk1.8.0_131.jdk 文件夹。

这表明默认安装的 JDK 可以正常工作,无需额外配置。

【讨论】:

【参考方案6】:

首先需要下载安装jdk8(http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html)

其次,做一些检查如下: 您的系统是否已经有一个未链接的 shell 使用 java 8?在你的终端试试这个(是的,撇号很重要):

$ '/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin/java' -version 

如果显示"java version "1.8.0_131" ",则可以进行下一步。

my screenshot

第三,编辑 bash_profile:

$ vi ~/.bash_profile 

然后输入:

JAVA_HOME="/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home"
PATH=$JAVA_HOME/bin:$PATH
CLASSPATH=.:$JAVA_HOME/lib
export JAVA_HOME
export CLASSPATH 

保存退出,然后

source ~/.bash_profile 

经过以上步骤,检查java版本

$ java -version
java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)

【讨论】:

以上是关于升级到Java8后,javac仍然显示1.7的主要内容,如果未能解决你的问题,请参考以下文章

为啥在 Google Play 管理中心升级 APK 后仍然显示安全警报?

升级到 java 8 后无法使用 crashlytics 发布项目

升级到JDK8,编译时发生 Error:java: java.lang.ExceptionInInitializerError

从 prestashop 1.6.1.9 升级到 1.7

将 GWT 从 1.7 升级到 2.0

makemigrations 和升级到 Django 1.7 的问题