Javac版本不更新

Javac版本不更新,java,macos,javac,Java,Macos,Javac,我正试图在mac上使用1.8作为目标版本编译一个jar,但javac失败,并显示消息invalid target release 当我运行javac-version时,它给出了javac1.6.029 我在/Library/Java/JavaVirtualMachines/jdk1.8.0_40.jdk下安装了1.8jdk,但即使在运行/Library/Java/JavaVirtualMachines/jdk1.8.0_40.jdk/Contents/Home/bin/javac-version

我正试图在mac上使用1.8作为目标版本编译一个jar,但javac失败,并显示消息invalid target release

当我运行javac-version时,它给出了javac1.6.029

我在/Library/Java/JavaVirtualMachines/jdk1.8.0_40.jdk下安装了1.8jdk,但即使在运行/Library/Java/JavaVirtualMachines/jdk1.8.0_40.jdk/Contents/Home/bin/javac-version时,它也为我提供了javac1.6.0_29

Sym将/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:/Developer/Tools/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版。

/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK链接指的是哪里

确保它引用了正确的JDK


/Library/Java/JavaVirtualMachines/jdk{major}.{minor}.{macro[\u update]}.jdk

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

检查:

回显%路径%

设置:

导出路径=java8文件夹:$PATH


或者查看此页面:

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

sudo update-alternatives --config javac
对于java:

sudo update-alternatives --config java

除了@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
执行以下步骤 在Windows搜索栏中,键入environment。 在您的环境变量帐户中,创建一个名为JAVA_HOME的变量。将其设置为C:\Program Files\Java\jdk1.8.0_65或JDK所在的任何位置

在系统环境变量中,编辑路径。将其放在路径值的开头:%JAVA\u HOME%\bin

按OK

退出您所在的任何命令窗口。 启动命令窗口。键入javac-version。 您应该得到以下响应:javac1.8.0@
如果键入哪个javac会发生什么?您的路径是什么样子的?哪个javac指向/usr/bin/javac,echo$PATH导致/usr/local/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/mysql/bin:/opt/X11/bin:/usr/local/git/bin:/Developer/Tools/Panda3DDownload再次加载JDK。二进制表示1.6时不会错,这是我最困惑的地方。但是我从下载了jdk,所以我想应该没问题。我刚刚删除了jdk文件夹,下载了dmg并再次运行。尽管如此,直接使用参数-version从文件夹执行javac给了我1.6.0_29..CurrentJDK链接到/Library/Java/JavaVirtualMachines/jdk1.8.0_40.jdk/Contents/。嘿,Miklos,我已经明确地将Java_HOME设置为1.8JDK。因此,echo$JAVA_HOME outputs/Library/JAVA/JavaVirtualMachines/jdk1.8.0_40.jdk/Contents/HOME/。javac版本的结果仍然是1.6.0_29。我也在$PATH变量中添加了/Library/Java/JavaVirtualMachines/jdk1.8.0_40.jdk/Contents/Home/bin/,结果仍然相同。请查看my path变量的更新。这是一个非常方便的脚本,因为update java Alternations调用仅适用于java,而对于javac、jar等,它更改为错误的java版本的默认配置。非常感谢。