【问题标题】:javac 8 on Mac OS doesn't compile and says it's 1.7Mac OS 上的 javac 8 无法编译并说它是 1.7
【发布时间】:2015-01-07 05:01:35
【问题描述】:

我在 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

会不会是 Apple(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说什么?
  • /Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home/bin/javac --version 说什么?
  • 你可能想检查你的 JAVA_HOME 和 $PATH 排序。通常,我会在 ~/.[bash_]profile 中像 export PATH=$JAVA_HOME/bin:$PATH 那样做某事,以确保我的环境是健全的。

标签: java macos javac


【解决方案1】:

解决方案在这个答案中:https://stackoverflow.com/a/22547808/130228。事实证明,如果 javac 找到一个,它会执行 ~/Library/Java/Extensions/tools.jar。所以删除 ~/Library/Java/Extensions 就可以了。

感谢 https://stackoverflow.com/users/3439760/user3439760 找到答案,感谢 Franco Azabache 为我找到链接。

【讨论】:

    【解决方案2】:

    我在/Library/Java/Extensions 中有一个tools.jar,一旦删除它,javac -version 就指向了JAVA_HOME

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 据我所知,Mac OS 中没有单独的 JRE,只有 JDK
      • @SashaO 由于您在执行不同的二进制文件时获得相同的版本,您能否提供以下输出:ls -la /Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home/bin/javac 以检查它是否不是符号链接?如果它不是符号链接,那么某些东西已经取代了你的二进制文件。或者路径中的某个位置(直到 java,例如 /Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk 指向其他东西)。
      • 感谢您的建议。不,不是符号链接——我已经更新了问题
      • @SashaO 你也检查过所有目录吗?也许/Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home 或下面或上面的东西是一个符号链接。
      • 也不是这个:find /Library/Java/JavaVirtualMachines -type l 只带来了一些原生库
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-03
      • 1970-01-01
      • 1970-01-01
      • 2014-11-21
      • 2013-09-25
      • 2017-09-27
      相关资源
      最近更新 更多