【问题标题】:Javac version doesn't updateJavac 版本不更新
【发布时间】:2015-06-14 14:51:09
【问题描述】:

我正在尝试在我的 mac 上使用 1.8 作为目标版本编译一个 jar,但 javac 失败并显示消息“无效的目标版本”。

当我运行 javac -version 时,它给了我“javac 1.6.0_29”。

我在“/Library/Java/JavaVirtualMachines/jdk1.8.0_40.jdk”下安装了 1.8 jdk,但即使我运行 /Library/Java/JavaVirtualMachines/jdk1.8.0_40.jdk/Contents/Home/bin/javac -version,它也会给我“javac 1.6.0_29”。

将“/System/Library/Frameworks/JavaVM.framework/Versions/”中的 CurrentJDK 文件夹链接到 Library 中的 jdk 文件夹的符号没有改变任何东西。 sym 也没有将 /usr/bin 中的 javac 链接到我的 jdk 文件夹中的 javac。

任何想法如何让 javac 使用我的 1.8 版本?

非常感谢!

更新

我的路径变量输出如下:

echo $PATH /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/mysql/bin:/opt/X11/bin:/usr/local /git/bin:/开发者/工具/Panda3D

echo $JAVA_HOME(因为我已经设置了它是为了让 javac 工作) /Library/Java/JavaVirtualMachines/jdk1.8.0_40.jdk/Contents/Home/

将 /Library/Java/JavaVirtualMachines/jdk1.8.0_40.jdk/Contents/Home/bin/ 预置到 $PATH 变量也不会更改 javac -version 的输出。

更新 2

其他问题:javac 是做什么的?它是直接执行其代码还是依赖于系统中的其他二进制文件?如果是这样,他们的链接可能会被破坏。否则我想知道为什么在我的 1.8 jdk 文件夹中执行二进制文件会给我 1.6 版本。

【问题讨论】:

  • 如果你输入which javac会发生什么?你的 PATH 是什么样的?
  • 哪个javac指向/usr/bin/javac,echo $PATH 结果是/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/mysql/bin:/opt/X11/bin:/usr/local/git/bin:/Developer/Tools/Panda3D
  • 再次下载JDK。二进制文件显示 1.6 时不会出错
  • 这是最让我困惑的地方。但是我从oracle.com/technetwork/java/javase/downloads/… 下载了jdk,所以我认为应该没问题。我刚刚删除了 jdk 文件夹,下载了 dmg 并再次运行它。尽管如此,使用参数 -version 直接从文件夹执行 javac 会给我 1.6.0_29..

标签: java macos javac


【解决方案1】:

配置/usr/bin/javac 指向的javac 的正确Debian/Ubuntu 方法是使用update-alternatives 命令。您可以以交互方式执行此操作,并从可用选项列表中进行选择:

sudo update-alternatives --config javac

对于java:

sudo update-alternatives --config java

【讨论】:

    【解决方案2】:

    除了@Zakaria 所说的,这个命令还会显示系统上安装的所有Java 包,例如:

    $ update-java-alternatives -l
    
    java-1.7.0-openjdk-amd64 1071 /usr/lib/jvm/java-1.7.0-openjdk-amd64
    java-1.8.0-openjdk-amd64 1069 /usr/lib/jvm/java-1.8.0-openjdk-amd64
    

    这是对 Java 工具的概述以及将使用哪个版本,例如:

    $ update-alternatives --get-selections | grep java
    ...
    java     manual   /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java
    javac    auto     /usr/lib/jvm/java-7-openjdk-amd64/bin/javac
    javadoc  auto     /usr/lib/jvm/java-7-openjdk-amd64/bin/javadoc
    ...
    

    如上所示,java 将从版本 8 运行,javac 从版本 7 运行。

    如果您想一次性更新所有 Java 工具的选择,请尝试以下操作,将包名称替换为您的选择之一:

    $ sudo update-java-alternatives -s java-1.8.0-openjdk-amd64
    

    确认这确实有效。如果没有或部分没有,您必须求助于半手动方式,例如:

    $ for i in $(update-alternatives --get-selections | grep java | awk '{system("basename "$3)}'); do sudo update-alternatives --config $i; done
    

    【讨论】:

    • 这是非常方便的脚本,因为 update-java-alternatives 调用仅适用于 java 和 javac、jar 等,它更改为错误 java 版本的默认配置。谢谢!
    【解决方案3】:

    /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK链接指向哪里?

    确保它引用了正确的 JDK

    /Library/Java/JavaVirtualMachines/jdk{major}.{minor}.{macro[_update]}.jdk

    【讨论】:

    • CurrentJDK 链接到/Library/Java/JavaVirtualMachines/jdk1.8.0_40.jdk/Contents/..
    【解决方案4】:

    请检查 JAVA_HOME 和 PATH 环境变量是否都指向 1.8 文件夹,并且没有指向 1.6 java 文件夹的链接,尤其是 PATH。

    检查:

    回显 %PATH%

    设置:

    export PATH="java8 文件夹":$PATH

    或查看此页面:Set environment variables on Mac OS X Lion

    【讨论】:

    • 嘿 Miklos,我已经明确地将 JAVA_HOME 设置为 1.8 jdk。因此 echo $JAVA_HOME 输出/Library/Java/JavaVirtualMachines/jdk1.8.0_40.jdk/Contents/Home/。 javac -version 仍然是 1.6.0_29。我也将“/Library/Java/JavaVirtualMachines/jdk1.8.0_40.jdk/Contents/Home/bin/”添加到我的 $PATH 变量中,结果仍然相同。请查看我的路径变量的更新。
    【解决方案5】:

    执行以下步骤

    • 在 Windows 搜索栏中,输入“环境”。
    • 在您的环境变量(帐户)中,创建一个名为 JAVA_HOME 的变量。将其设置为 C:\Program Files\Java\jdk1.8.0_65 (或您的 JDK 所在的任何位置)。

    • 在您的系统环境变量中,编辑 PATH。把它放在 PATH 值的开头:%JAVA_HOME%\bin;

    • 按确定。

    • 退出您所在的所有命令窗口。
    • 启动命令窗口。键入 javac -version。 你应该得到这个响应:javac 1.8.0_65

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-07
      • 1970-01-01
      • 1970-01-01
      • 2018-01-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多