如何在Mac OS X上获得JDK 1.5

Eri*_*ric 23 java macos

我必须为仍在运行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
Run Code Online (Sandbox Code Playgroud)

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

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

Raf*_*nes 13

查看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.


Jam*_*sky 8

这里真的有两个问题:

  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


Mic*_*yan 6

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


Ste*_*ker 5

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

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

  • 请注意,即使这是兼容性的最佳猜测.如果使用任何新的JDK 1.6类或方法,你仍然被搞砸了.自从osx猛拉1.5以来,我已经被这么多次咬过了,这真是令人生气. (11认同)
  • -1将目标符合性设置为1.5时,并不总是有效.我遇到了这个问题,因为java.sql.CallableStatement在1.5和1.6之间发生了根本性的变化.这个项目中的一些类我正在尝试根据1.5版本构建实现该接口,所以当我尝试构建(即使符合1.5)它抱怨类没有完全实现接口...因为接口是尽管使用1.5合规,但1.6版本. (6认同)
  • 答案是不完整/不正确的(参见Kenny的评论).请参阅下面的答案,了解如何在1分钟内下载并安装JDK 1.5.解决这个问题. (2认同)