【发布时间】: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..