我必须为仍在运行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?
答案 0 :(得分:12)
查看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。< / p>
答案 1 :(得分:7)
这里确实存在两个问题:
我还没有任何东西可以添加到已经编写的有关安装旧版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
答案 2 :(得分:6)
您不需要Java 1.5的副本就可以开发它; Java 1.6向后兼容Java 1.5,因此任何适用于1.5的东西都可以在1.6上运行。 -source
和-target
标志可能有用,以确保所有内容都适用于1.5。也就是说,this article将解释如何在Snow Leopard上获取Java 1.5的副本。但请注意,它可能会破坏/损害您的系统。
答案 3 :(得分:5)
如果您在Eclipse或其他IDE中编写代码,您应该能够将其配置为以1.5合规性为目标。
如果您直接使用javac,可以尝试使用-source 1.5
和/或-target 1.5
javac选项,这可能足以满足您的需求吗? 1.6 JDK应该能够生成符合1.5的代码。
答案 4 :(得分:3)
谢谢你的作品很棒:http://wiki.oneswarm.org/index.php/OS_X_10.6_Snow_Leopard
奇怪的是,你必须遵循说明中的重命名步骤,在那里你修改1.5和1.5.0的符号链接到实际的豹子Java 1.5 - 如果你不这样做而只是尝试运行java二进制文件,你得到一个总线错误!
在任何情况下,由于这些步骤,我现在有一个实际的Java 5 JDK可以在Eclipse中编译和运行,这可以节省我很多很多的麻烦。首先,我可以立即找到并删除对仅限Java 1.6的方法的引用。这很棒。之前这些只会出现在质量保证中,或者更糟糕的是,当仍然使用Java 5的少数客户之一尝试运行我们的程序时。这是。坏。
这就是为什么“支持”JDK5而实际上只是将符号链接指向Java 6的原因并不足以进行开发。
答案 5 :(得分:3)
绝对最简单的方法是use this script by Brice Dutheil。保存脚本,从Apple下载dmg(脚本将告诉您URI),然后运行脚本。瞧!
答案 6 :(得分:0)
尽管可以使用-source和-target标志,但它们并不总是生成适用于所有旧JRE的代码。我肯定曾经尝试过反编译到一个较旧的规范生成的代码,这些代码对某些用户来说很好,但不会在其他用户上运行。要确保使用1.5或1.4 JRE的每个人都可以运行您的代码,您应该使用1.5或1.4 JDK进行生产构建。
我发现这些说明非常有助于在雪豹下安装“真正的”1.5和1.4 JDK: http://codethought.com/blog/?p=233
答案 7 :(得分:-4)
你需要一个旧版本的OS X.