【问题标题】:How to Revert to Java 1.6 on Mac OS X 10.7.5如何在 Mac OS X 10.7.5 上恢复到 Java 1.6
【发布时间】:2012-11-15 16:50:14
【问题描述】:

我有 1.6 安装程序。我用过。它不会改变我的 Java 安装,也不会说有旧版本,但它确实完成了安装。

我一直在使用符号链接,但无论我做什么,都在运行

java -version

在终端中总是导致

Daves-MacBook-Pro:core-server dave$ java -version
java version "1.7.0_07"
Java(TM) SE Runtime Environment (build 1.7.0_07-b10)
Java HotSpot(TM) 64-Bit Server VM (build 23.3-b01, mixed mode)

我的应用程序使用 GAE,它根本不使用 Java 1.7。因此,我无法使用 1.7 编译我的代码!我必须使用 1.6,但我未能找到删除 1.7 或强制在 1.6 上进行构建/编译的方法。

最后一点,我在命令行上运行构建工具,所以在 Eclipse 中更改项目的设置似乎没有帮助。

【问题讨论】:

  • 您的系统偏好设置中没有 Oracle Java 偏好设置吗?您也可以通过 stackoverflow.com/questions/7731268/… 手动执行此操作,或者如果您备份了旧的 Java Preferences 应用程序,则可以恢复它。

标签: java macos


【解决方案1】:

javajavac 等命令行工具对JAVA_HOME 环境变量的值敏感,如果此变量指向 1.6 的 JDK,将使用 1.6。工具/usr/libexec/java_home 是您的朋友。跑步

/usr/libexec/java_home

将为您系统上最新的 JDK 打印出适当的 JAVA_HOME 值。这将是 Java 7,但您可以使用 -v 标志应用约束,例如

/usr/libexec/java_home -v '1.6*'

将返回一个JAVA_HOME 值,以获得您系统上可用的最佳1.6 JDK。你可以使用这个值来设置JAVA_HOME

export JAVA_HOME=`/usr/libexec/java_home -v '1.6*'`

将上述行添加到您主目录中的.bash_profile 文件中,作为特定终端会话的一次性使用,或永久用于所有未来的终端会话。


$ export JAVA_HOME=`/usr/libexec/java_home -v '1.6*'`
$ java -version
java version "1.6.0_37"
Java(TM) SE Runtime Environment (build 1.6.0_37-b06-434-11M3909)
Java HotSpot(TM) 64-Bit Server VM (build 20.12-b01-434, mixed mode)
$ export JAVA_HOME=`/usr/libexec/java_home -v '1.7*'`

$ java -version
java version "1.7.0_09"
Java(TM) SE Runtime Environment (build 1.7.0_09-b05)
Java HotSpot(TM) 64-Bit Server VM (build 23.5-b02, mixed mode)

【讨论】:

  • 我正在使用 export 命令更改环境变量 JAVA_HOME - 但是当我重新运行 /usr/libexec/java_home 时,它​​仍然返回 1.7.0 作为当前 JDK 链接!除了运行命令之外,我还需要做些什么来强制更新 JAVA_HOME 吗?
  • @Davek804 我已经编辑了我的帖子以使事情更清楚 - /usr/libexec/java_home 命令不会告诉您当前使用的是哪个 Java;它的工作是找到一个合适的值,你可以把它放入 JAVA_HOME.
【解决方案2】:

如果您需要编写要在以前版本的 Java 上运行的代码,那么您可以更改编译标志。这可能就是您所需要的,并且

例如。

javac -source 1.6 -target 1.6 MyClass.java

源 arg 指出源是用该版本的 Java 编写的,因此 List<String> strings = new ArrayList<>(); 将是一个编译错误。 Target 告诉编译器编译针对指定 JVM 版本的字节码。虽然我认为 1.7 完全向后兼容 1.5 和 1.6。

【讨论】:

  • 几乎,唯一的问题是您仍在针对 1.7 类库进行编译。如果您尝试引用 1.6 中不存在的类或方法,编译器不会抱怨,但它会在运行时失败并显示 NoSuchMethodError。您需要安装 1.6 类库并将编译器的引导类路径设置为指向它以使其捕获这些情况。
  • 是的,我应该提到这一点。我之前在使用 Swing 时就被这个问题抓住了。我的建议更像是一个
【解决方案3】:

我遇到了类似的问题。安装 JDK7 后,我的一些应用程序不再工作。我需要恢复到 JDK6,但我做了不同的事情。我注意到在我的 /System/Library/Frameworks/JavaVM.framework/Versions/ 中,它显示了以下内容:

lrwxr-xr-x  1 root  wheel   10 Oct 25 17:01 1.4 -> CurrentJDK
lrwxr-xr-x  1 root  wheel   10 Oct 25 17:01 1.4.2 -> CurrentJDK
lrwxr-xr-x  1 root  wheel   10 Oct 25 17:01 1.5 -> CurrentJDK
lrwxr-xr-x  1 root  wheel   10 Oct 25 17:01 1.5.0 -> CurrentJDK
lrwxr-xr-x  1 root  wheel   10 Oct 25 17:01 1.6 -> CurrentJDK
lrwxr-xr-x  1 root  wheel   10 Oct 25 17:01 1.6.0 -> CurrentJDK
drwxr-xr-x  8 root  wheel  272 Oct 25 18:06 A
lrwxr-xr-x  1 root  wheel    1 Oct 25 17:01 Current -> A
lrwxr-xr-x  1 root  wheel   59 Nov 20 21:40 CurrentJDK -> /Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/

所以我删除了符号链接 CurrentJDK

 sudo rm CurrentJDK

并重新创建了指向 JDK6 的符号链接,它仍在我的 Mac 上

sudo ln -s  /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/ CurrentJDK

这对我有用

java -version
   java version "1.6.0_65"
   Java(TM) SE Runtime Environment (build 1.6.0_65-b14-462-11M4609)
   Java HotSpot(TM) 64-Bit Server VM (build 20.65-b04-462, mixed mode)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-04
    • 2012-12-30
    • 1970-01-01
    • 2012-12-21
    • 1970-01-01
    • 2012-12-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多