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

我在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 

在这个path中, Current是符号链接。 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) 

编辑

继续原文,我已经做了一些与jenv挖,就像这个答案build议。

 > 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潜伏在我的path,这是不知何故被调用。

可以肯定的是,我已经完全毁掉了我的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 

然后我重新下载了一个新的安装程序并运行它。

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

更新

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

不过,我还是处于亏损状态 – 我从哪里出发呢? 我如何获得javac 1.8安装?

如果/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 

解决scheme在 Mankeh博客中 find


还请在超级用户上检查此答案以dynamic切换JDK版本。


更新:我想我已经find了罪魁祸首!

尝试这个:

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

解决scheme发现: OSX 10.9.2上的Java 1.7运行为1.5?

对于Windows用户:

这是可能的,你必须改变你的PATHvariables。 尝试将您的“%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版本。

这(很可能)是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引用。

也许你可以删除你的类path中的标准.jar文件。 当我删除/Library/Java/Extensions的jar时,问题就解决了。 更多信息: Java编译错误:Mac

在这里join我自己的经验,我从Oracle安装了jdk-8u131-macosx-x64。 一切都很完美。 没有JAVA_HOME环境variables存在或需要。

 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) 

/系统/库显示了这一点:

 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 

而/库/ 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的默认安装正常工作,不需要额外的configuration。

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

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

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

如果显示“java version”1.8.0_131“”,则可以进入下一步。

我的截图

第三,编辑bash_profile:

 $ vi ~/.bash_profile 

并input:

 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)