Как получить JDK 1.5 на Mac OS X

Мне нужно написать код для устаревшего приложения, которое все еще запускает 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 X v10.6.3 (Snow Leopard). Есть ли способ получить фактический 1,5 JDK, установленный в этой версии ОС?

Или мне нужно попытаться найти старую версию OS X, прежде чем я смогу сделать эту работу?

Ответ 1

Если вы пишете код в Eclipse или, возможно, какую-то другую среду IDE, вы должны настроить его для соответствия требованиям 1.5.

Если вы используете javac напрямую, вы можете попробовать опции -source 1.5 и/или -target 1.5 javac, которых может быть достаточно для того, что вы делаете? 1.6 JDK должен иметь возможность выпускать 1,5-совместимый код.

Ответ 2

Посмотрите http://wiki.oneswarm.org/index.php/OS_X_10.6_Snow_Leopard о том, как получить и установить 1.4 и 1.5 JDK на Snow Leopard. Также имейте в виду, что всякий раз, когда вы запускаете Software Update и устанавливаете JDK-обновление, вам необходимо "исправить" символические ссылки в 1.4 и 1.5 JDK.

ОБНОВЛЕНИЕ: в качестве примечания для тех, кто разрабатывает несколько JDK на OS X, посмотрите на эту удобную небольшую утилиту для переключения JDK из командной строки: setjdk.

Ответ 3

Здесь есть две проблемы:

  • Установка старой версии Java и сохранение обновления Software Update.
  • Сообщать приложениям, которым требуется более старая версия, где их можно найти, при этом все остальные извлекают выгоду из последней версии.

Мне нечего добавить (пока) к тому, что уже было написано об установке старой версии Java, однако в соответствии с этим сообщением от Майк Свинглер, Java Runtime Engineer в Apple:

Никто не может или не должен менять символические ссылки в /System/Library/Frameworks/JavaVM.framework, за исключением обновлений программного обеспечения Apple (и мы не желаем этого делать, потому что это неизбежно ломает кого-то)

Другими словами, обновление ссылок операционной системы со старой копией Java является сомнительной практикой, поскольку оно заставляет каждое приложение Java в системе использовать старую версию Java.

Правильный способ - установить JAVA_HOME в правильную версию Java по мере необходимости. Вы можете сделать это, выполнив /usr/libexec/java_home, чтобы получить путь к определенной версии. Например, чтобы получить путь к версии 1.5:

/usr/libexec/java_home --version 1.5

Ответ 4

Вам не нужна копия Java 1.5 для ее разработки; Java 1.6 обратно совместим с Java 1.5, поэтому все, что работает на 1.5, будет работать на 1,6. Флаги -source и -target могут быть полезны для обеспечения того, чтобы все работало на 1.5. Тем не менее, эта статья объяснит, как получить копию Java 1.5 на Snow Leopard. Имейте в виду, однако, что это может потенциально повредить/повредить вашей системе.

Ответ 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. Это здорово. Прежде чем они появятся в QA или, что еще хуже, когда один из немногих клиентов, все еще на Java 5, попытался запустить нашу программу. Который был. Bad.

Вот почему "поддержка" JDK5, хотя на самом деле просто указывает символические ссылки на Java 6, недостаточно хороша для разработки.

Ответ 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.