首页 文章

升级到Java8后,javac仍显示1.7

提问于
浏览
36

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

在该路径中, 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)

编辑

继原始帖子之后,我已经按照this answer的建议对_1781480进行了一些挖掘 .

> 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

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

    Solution found in Mankeh Blog


    同时检查超级用户this answer以动态切换JDK版本 .


    Update: 我想我找到了罪魁祸首!

    试试这个:

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

    Solution found in: Java 1.7 on OSX 10.9.2 running as 1.5?

  • 0

    对于Windows用户:

    您可能需要更改PATH变量 . 尝试将"%JAVA_HOME%/bin"设置为PATH中的 first 条目 .

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

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

    你改变它是这样的:

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

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

  • 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,所以这是操作系统参考设置中的一个问题然后我想 .

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

  • 10

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

  • 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的默认安装正常,无需额外配置 .

  • 37

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

    其次,做一些检查如下:你的系统是否已经使用了非连接shell for 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)
    

相关问题