Javac 版本不更新

Posted

技术标签:

【中文标题】Javac 版本不更新【英文标题】:Javac version doesn't update 【发布时间】: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.. 【参考方案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/jdkmajor.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

【讨论】:

以上是关于Javac 版本不更新的主要内容,如果未能解决你的问题,请参考以下文章

java版本和javac版本不一致

javac与java版本不一致

jdk和jre 在cmd中版本不相同 处理办法,javac不是内部命令

Java和Javac版本不一致

Java和Javac版本不一致

IDEA:javac:源版本 1.7 需要目标版本 1.7