【问题标题】:How to get JDK 1.5 on Mac OS X如何在 Mac OS X 上获取 JDK 1.5
【发布时间】:2011-02-20 06:05:30
【问题描述】:

我必须为仍在运行 JDK 1.5 的遗留应用程序编写一些代码。不幸的是,看起来 OS X 实际上并没有安装 1.5 JDK。它只是链接到 1.6:

/System/Library/Frameworks/JavaVM.framework/Versions $ ls -l
lrwxr-xr-x  1 root  wheel    5 Apr 26 11:53 1.3 -> 1.3.1
drwxr-xr-x  3 root  wheel  102 Feb 11 15:33 1.3.1
lrwxr-xr-x  1 root  wheel   10 Apr 26 11:53 1.4 -> CurrentJDK
lrwxr-xr-x  1 root  wheel   10 Apr 26 11:53 1.4.2 -> CurrentJDK
lrwxr-xr-x  1 root  wheel   10 Apr 26 11:53 1.5 -> CurrentJDK
lrwxr-xr-x  1 root  wheel   10 Apr 26 11:53 1.5.0 -> CurrentJDK
lrwxr-xr-x  1 root  wheel    5 Apr 26 11:53 1.6 -> 1.6.0
drwxr-xr-x  7 root  wheel  238 Apr 26 11:53 1.6.0
drwxr-xr-x  8 root  wheel  272 Apr 26 11:53 A
lrwxr-xr-x  1 root  wheel    1 Apr 26 11:53 Current -> A
lrwxr-xr-x  1 root  wheel    3 Apr 26 11:53 CurrentJDK -> 1.6

http://developer.apple.com/java/faq/ 看来,Java 是操作系统更新的一部分...我在 Mac OS X v10.6.3(雪豹)。有没有办法在这个操作系统版本上安装一个实际的 1.5 JDK?

或者我是否需要先尝试找到旧版本的 OS X 才能完成这项工作?

【问题讨论】:

    标签: macos java


    【解决方案1】:

    查看http://wiki.oneswarm.org/index.php/OS_X_10.6_Snow_Leopard,了解如何在 Snow Leopard 上获取和安装 1.4 和 1.5 JDK。 还要记住,每当您运行软件更新并安装了 JDK 更新时,您都需要“修复”指向 1.4 和 1.5 JDK 的符号链接。

    更新:作为旁注,对于那些在 OS X 上使用多个 JDK 进行开发的人,请查看这个从命令行切换 JDK 的便捷小实用程序:setjdk

    【讨论】:

      【解决方案2】:

      这里确实有两个问题:

      1. 安装旧版本的 Java防止软件更新将其删除。
      2. 告诉需要旧版本的应用程序在哪里可以找到它,同时让其他一切都从最新版本中受益。

      我没有什么要补充的(目前)关于安装旧版 Java 的文章,但是,according to this post from Mike Swingler,Apple 的 Java 运行时工程师:

      除了 Apple 软件更新之外,没有人可以或不应该更改 /System/Library/Frameworks/JavaVM.framework 中的符号链接(我们不愿意这样做,因为它不可避免地会破坏某人)

      换句话说,更新操作系统到旧版 Java 副本的链接是有问题的做法,因为它会强制系统上的每个 Java 应用程序使用旧版 Java。

      正确的方法是根据需要将JAVA_HOME 设置为正确的Java 版本。您可以通过执行/usr/libexec/java_home 来获取特定版本的路径。例如,要获取 1.5 版本的路径:

      /usr/libexec/java_home --version 1.5

      【讨论】:

        【解决方案3】:

        您不需要 Java 1.5 的副本就可以进行开发; Java 1.6 向后兼容 Java 1.5,因此任何适用于 1.5 的东西都适用于 1.6。 -source-target 标志可能有用,以确保一切都在 1.5 上运行。也就是说,this article 将解释如何在 Snow Leopard 上获取 Java 1.5 的副本。但请注意,它可能会破坏/损害您的系统。

        【讨论】:

        • JRE 向后兼容。 JDK 不是这样。如果任何类在您使用的 jdk 中实现了新接口,那么您将收到一条错误消息,提示您需要实现这些新方法。
        • 是的,但是方法从一个 JDK 版本删除或重命名到另一个版本的频率如何?通常只添加方法。弃用通常需要多个版本的 JDK 才能完全删除。
        • Ehh .. 正是 :) 我从来没有提到删除方法。如果您尝试使用 JDK 1.6 编译为 JDK 1.5 制作的源代码,并且该源代码实现了在 JDK 1.6 中已扩展(添加方法)的接口,那么您将需要更改旧源代码以实现新方法。向后兼容?
        【解决方案4】:

        如果您在 Eclipse 或其他一些 IDE 中编写代码,您应该能够将其配置为符合 1.5 标准。

        如果您直接使用 javac,您可以尝试使用 -source 1.5 和/或 -target 1.5 javac 选项,这可能足以满足您的需求? JDK 1.6 应该能够生成兼容 1.5 的代码。

        【讨论】:

        • 请注意,即使这是对兼容性的最佳猜测。如果使用了任何新的 JDK 1.6 类或方法,您仍然会被搞砸。自从 osx 推出 1.5 以来,我已经被这个问题咬过很多次了,真是令人气愤。
        • -1 将目标合规性设置为 1.5 时并不总是有效。我遇到了这个确切的问题,因为 java.sql.CallableStatement 在 1.5 和 1.6 之间发生了根本性的变化。这个项目中的一些类我正在尝试根据 1.5 版本构建实现该接口,所以当我尝试构建时(即使符合 1.5 标准)它抱怨这些类没有完全实现接口......因为接口是1.6 版本,尽管使用 1.5 合规性。
        • 我和 Kenny 有同样的问题:isWrapperFor(java.Lang.Class> 在 Java 1.6 版中被添加到 java.sql.Wrapper。设置源/目标对此没有帮助。
        • 答案不完整/不正确(见肯尼的评论)。有关如何在 1 分钟内下载和安装 JDK 1.5,请参阅下面的答案。解决这个问题。
        • 是的,有限制。但是,如果您没有遇到具体问题,它确实可以节省您安装多个 JDK。
        【解决方案5】:

        感谢这很好用:http://wiki.oneswarm.org/index.php/OS_X_10.6_Snow_Leopard

        奇怪的是,您必须按照说明中的重命名步骤,将 1.5 和 1.5.0 的符号链接修改为实际的 leopard Java 1.5 - 如果您不这样做,只需尝试运行 java 二进制文件,你会得到一个总线错误!

        无论如何,多亏了这些步骤,我现在有了一个可以在 Eclipse 中编译和运行的实际 Java 5 JDK,这为我节省了很多的麻烦。一方面,我可以立即找到并删除对仅限 Java 1.6 的方法的引用。这很棒。之前这些只会出现在 QA 中,或者更糟糕的是,当少数仍然使用 Java 5 的客户之一尝试运行我们的程序时。这是。不好。

        这就是为什么“支持”JDK5 而实际上只是将符号链接指向 Java 6 对开发来说还不够好。

        【讨论】:

          【解决方案6】:

          最简单的方法是use this script by Brice Dutheil。保存脚本,从 Apple 下载 dmg(脚本会告诉你 URI),然后运行脚本。瞧!

          【讨论】:

            【解决方案7】:

            虽然可以使用 -source 和 -target 标志,但它们并不总是生成适用于所有旧 JRE 的代码。我肯定有过尝试反向编译到旧规范生成的代码的情况,这些代码对某些用户来说工作得很好,但不会在其他用户身上运行。要真正确保使用 1.5 或 1.4 JRE 的每个人都可以运行您的代码,您可能应该使用 1.5 或 1.4 JDK 进行生产构建。

            我发现这些说明对于在雪豹下安装“真正的”1.5 和 1.4 JDK 非常有帮助: http://codethought.com/blog/?p=233

            【讨论】:

              【解决方案8】:

              为此,您需要旧版本的 OS X。

              【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2010-12-07
              • 2014-09-19
              • 2018-10-07
              • 1970-01-01
              • 1970-01-01
              • 2012-10-12
              相关资源
              最近更新 更多