升级到Java8后,javac仍显示1.7

时间:2014-04-21 17:35:21

标签: java macos java-8

我遇到从JDK 1.7升级的问题 - > OSX上的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

在该路径中,CurrentA的符号链接。 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的建议,使用this answer进行了一些挖掘。

> 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?

6 个答案:

答案 0 :(得分:38)

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

答案 1 :(得分:10)

对于Windows用户:

您可能需要更改PATH变量。 尝试将“%JAVA_HOME%/ bin”设置为路径中的第一个条目。

所以现在它看起来像这样:

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

你改变它:

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

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

答案 2 :(得分:0)

这是(很可能) 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 ,所以这是操作系统参考设置中的一个问题,我猜。 / p>

要解决此问题,您需要在操作系统中手动修复 javac 引用。

答案 3 :(得分:0)

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

答案 4 :(得分:0)

在这里添加我自己的经验,我从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的默认安装正常,无需额外配置。

答案 5 :(得分:0)

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

其次,做一些检查如下: 你的系统是否已经使用了java-not-shell-shell?在你的终端尝试这个(是的,撇号很重要):

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

如果显示&#34; java版&#34; 1.8.0_131&#34; &#34; ,然后你可以进入下一步。

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)