如何在Mac OS X上获得JDK 1.5

我必须为仍在运行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 (Snow Leopard)上。 有没有办法在这个操作系统版本上安装实际的1.5 JDK?

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

如果您在Eclipse或其他IDE中编写代码,则应该能够将其配置为以1.5合规性为目标。

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

查看http://wiki.oneswarm.org/index.php/OS_X_10.6_Snow_Leopard ,了解如何在Snow Leopard上获取和安装1.4和1.5 JDK。 另外请记住,无论何时运行Software Update并安装JDK更新,您都需要将符号链接“修复”到1.4和1.5 JDK。

更新:作为附注,对于那些在OS X上使用多个JDK进行开发的人,请查看这个方便的小工具来从命令行切换JDK: setjdk 。

这里真的有两个问题:

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

然而, 根据 Apple的Java运行时工程师Mike Swingler发表的这篇文章,我还没有任何东西可以添加到已经有关安装旧版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

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

谢谢这个很棒: http : //wiki.oneswarm.org/index.php/OS_X_10.6_Snow_Leopard

奇怪的是,你必须遵循说明中的重命名步骤,在那里修改1.5和1.5.0的符号链接到实际的leopard Java 1.5 – 如果你不这样做并且只是尝试运行java二进制文件,你会得到一个总线错误!

在任何情况下,由于这些步骤,我现在有一个实际的Java 5 JDK在Eclipse中编译和运行,这给我带来了很多麻烦。 首先,我可以立即找到并删除对Java 1.6-only方法的引用。 这很棒。 之前这些只会出现在质量保证中,或者更糟糕的是,当仍然使用Java 5的少数客户之一尝试运行我们的程序时。 这是。 坏。

这就是为什么“支持”JDK5而实际上只是将符号链接指向Java 6的原因并不足以进行开发。

绝对最简单的方法是使用Brice Dutheil的这个脚本 。 保存脚本,从Apple下载dmg(脚本将告诉您URI),然后运行脚本。 瞧!

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

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

你需要一个旧版本的OS X.