如何在MacOSX上获得JDK1.5

如何在MacOSX上获得JDK1.5,macos,java,Macos,Java,我必须为仍然运行JDK1.5的遗留应用程序编写一些代码。不幸的是,看起来OSX实际上没有安装1.5JDK;它只是链接到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 r

我必须为仍然运行JDK1.5的遗留应用程序编写一些代码。不幸的是,看起来OSX实际上没有安装1.5JDK;它只是链接到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
听起来好像Java是操作系统更新的一部分……我在(雪豹)上。有没有办法在这个操作系统版本上安装一个实际的1.5 JDK


或者,在我完成这项工作之前,我是否需要尝试找到一个旧版本的OSX?

为此,您需要一个旧版本的OSX。

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

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

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

了解如何在Snow Leopard上获取并安装1.4和1.5 JDK。 还要记住,无论何时运行软件更新并安装JDK更新,都需要“修复”到1.4和1.5 JDK的符号链接


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

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

我发现这些说明对于在snow leopard下安装“真正的”1.5和1.4 JDK非常有用:

谢谢这很有效:

奇怪的是,您必须遵循说明中的重命名步骤,将1.5和1.5.0的符号链接修改为实际的leopard Java 1.5-如果您不这样做,而只是尝试运行Java二进制文件,则会出现总线错误

无论如何,由于这些步骤,我现在有了一个实际的Java5JDK可以在Eclipse中编译和运行,这为我节省了很多麻烦。首先,我可以立即找到并删除对Java1.6-only方法的引用。太棒了。在此之前,这些问题只会出现在QA中,甚至更糟的是,当少数几个仍使用Java5的客户之一试图运行我们的程序时。是的。糟糕


这就是为什么“支持”JDK5而实际上只是将符号链接指向Java6对于开发来说不够好的原因

这里确实有两个问题:

  • 安装旧版本的Java,并防止软件更新将其删除
  • 告诉需要旧版本的应用程序在哪里可以找到它,同时让其他一切都从最新版本中受益
  • 关于安装旧版本的Java,我还没有什么要补充的,但是,苹果的Java运行时工程师:

    除了苹果软件更新之外,没有人可以或者应该更改/System/Library/Frameworks/JavaVM.framework中的符号链接(我们不愿意这样做,因为这不可避免地会让人崩溃) 换句话说,更新操作系统到旧版本Java的链接是一种值得怀疑的做法,因为它迫使系统上的每个Java应用程序都使用旧版本的Java

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


    /usr/libexec/java_home--1.5版

    最简单的方法是。保存脚本,从Apple下载dmg(脚本将告诉您URI),然后运行脚本。瞧

    请注意,即使这也是对兼容性的最佳猜测。如果使用了任何新的JDK1.6类或方法,那么您仍然会陷入困境。自从osx猛拉1.5后,我已经被它咬了很多次了,这是非常令人愤怒的。-1当将目标合规性设置为1.5时,它并不总是起作用。我遇到了这个问题,因为java.sql.CallableStatement在1.5和1.6之间发生了根本性的变化。在这个项目中,我试图构建的一些类根据1.5版本实现该接口,所以当我尝试构建(即使符合1.5版本)时,它会抱怨这些类没有完全实现该接口。。。因为尽管使用了1.5合规性,接口仍然是1.6版本。我与Kenny有相同的问题:isWrapperFor(java.Lang.Class是在java的1.6版本中添加到java.sql.Wrapper的。设置源/目标对此没有帮助。答案不完整/不正确(见Kenny的评论)。有关如何在1分钟内下载和安装JDK 1.5,请参阅下面的答案。解决了这个问题。是的,有一些限制。但是如果您没有遇到特定问题,那么安装多个JDK确实可以节省您的时间。JRE是向后兼容的。JDK不是这样;如果您使用的JDK中有任何类实现了新接口,那么您将获得一个错误地说您需要实现这些新方法。对,但是一个方法从一个JDK版本删除或重命名到另一个版本的频率是多少?通常只添加方法。弃用通常需要几个版本的JDK才能完全删除。Ehh..确切地说:)我从来没有提到过删除方法。如果您试图用JDK1.6编译为JDK1.5编写的源代码