在Mac OS上,javac 8无法编译并显示为1.7版本。

3

我在Mac OS X上安装了JDK 1.8.0_25。当尝试编译Java 8源代码时,它会报错:

  > javac -source 1.8 ComposableList.java
  javac: invalid source release: 1.8

我确定我正在使用Java 8 JDK编译器运行:

  > which javac
  /Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home/bin/javac
  > java -version
  java version "1.8.0_25"
  Java(TM) SE Runtime Environment (build 1.8.0_25-b17)
  Java HotSpot(TM) 64-Bit Server VM (build 25.25-b02, mixed mode)

然而javac显示是1.7版本。
  > javac -version
  javac 1.7.0_60

苹果(或Oracle)是否将错误版本的编译器与JDK捆绑在一起?还是我做错了什么?

编辑:无论我的$PATH中是否包含任何java目录,结果都是相同的(通常不包含):

> which java
/usr/bin/java
> which javac
/usr/bin/javac

编辑 2:我发现一个奇怪的事情,无论我使用哪个编译器,报告的javac编译器版本都是相同的:

> /Library/Java/JavaVirtualMachines/jdk1.7.0_21.jdk/Contents/Home/bin/javac -version
javac 1.7.0_60
> /Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home/bin/javac -version
javac 1.7.0_60
> /Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home/bin/javac -version
javac 1.7.0_60

编辑3: 正如@dan所建议的那样,所有的javac都可以成为一个符号链接吗?不,事实证明它们没有符号链接:

>ls -l /Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home/bin/javac
-rwxrwxr-x  1 root  wheel  99376 Sep 17 17:13         /Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home/bin/javac
> ls -l /Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home/bin/javac
-rwxrwxr-x  1 root  wheel  99360 Mar 18  2014 /Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home/bin/javac

命令 echo $PATH 的输出是什么? - damian
可能类似于这个问题:在Mac OS X上安装了Java 7,但终端仍在使用版本6。 - michaelok
1
/Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home/bin/javac --version 说了什么? - njzk2
你可能想要检查一下你的JAVA_HOME和$PATH的顺序。通常,我会在~/.[bash_]profile中执行类似export PATH=$JAVA_HOME/bin:$PATH的操作,以确保我的环境是正常的。 - Markus W Mahlberg
3个回答

1

1

我曾经在/Library/Java/Extensions中有一个tools.jar,一旦删除它,javac -version指向了那个时刻的JAVA_HOME


0

可能您的路径中在jdk/bin之前有一个jre/bin目录。在jre安装中不存在javac命令。


我知道在Mac OS中没有单独的JRE,只有JDK。 - Sasha O
@SashaO 由于在执行不同的二进制文件时得到相同的版本,您能否提供以下输出:ls -la /Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home/bin/javac以检查它是否不是符号链接?如果它不是符号链接,则表示某些东西已替换了您的二进制文件。或者路径中的某个地方(直到java,例如/Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk指向其他内容)。 - dan
感谢您的建议。不好意思,我已经更新了问题,它不是一个符号链接。 - Sasha O
@SashaO 你是否也检查了所有的目录?也许 /Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home 或者其上下层目录是符号链接。 - dan
“find /Library/Java/JavaVirtualMachines -type l”带来的只有一些本地库,没有任何结果。 - Sasha O

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接