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

2022-09-01 05:19:59

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

在该路径中,是 指向 的符号链接。的内容是一系列文件(不是符号链接)。CurrentAA/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做了一些挖掘。

> 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

然后,我重新下载了安装程序的新副本并运行它。

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

更新

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

但是,我仍然不知所措 - 我该从这里走向何方?如何安装 javac 1.8?


答案 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博客中找到的解决方案


另请在超级用户上检查此答案,以动态切换JDK版本。


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

试试这个:

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

解决方案位于:OSX 10.9.2 上的 Java 1.7 作为 1.5 运行?


答案 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 版本。