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 版本不更新的主要内容,如果未能解决你的问题,请参考以下文章