Как Mac OS X определяет, что для приложения требуется Java?

Я отвечаю за приложение Java, которое развертывается на нескольких платформах, включая OS X. В последних версиях приложения мы распространяем два отдельных пакета для OS X - тот, который использует JavaApplicationStub, предоставленный Apple, и другой, который включает в комплекте JDK 7 и использует созданный вручную пусковой аппарат (модификация Oracle JavaAppLauncher).

Проблема в том, что с последним пакетом Mac OS X по-прежнему настаивает на том, что у вас установлена ​​Java 6, если вы пытаетесь запустить приложение. В частности, в сообщении говорится:

"Чтобы открыть (приложение), вам понадобится среда выполнения Java SE 6. Не хотите ли вы установить ее сейчас?"

Если вы не устанавливаете Java SE 6, вы не можете запустить приложение, несмотря на то, что JDK 7 входит в комплект (и, если вы устанавливаете Java 6, он тем не менее работает со связанным Java 7).

Что я пытаюсь понять, так это то, как OS X решает, что приложение требует Java? Я попытался переименовать словарь Java в файл Info.plist и переименовать подпапку Java в папке Ресурсы без успеха. У кого-нибудь есть идеи? Возможно ли иметь приложение с запущенным JDK, не требующим установки JDK системы?

Ответ 1

Я нашел ответ (с помощью Майка Свинглера в списке рассылки [email protected]).

Наличие словаря Java в файле Info.plist является тем, что вызывает диалог, однако изменение имени словаря после попытки запуска приложения недостаточно. Система как-то кэширует требование для Java и поэтому просто выдает диалог снова. Чтобы этого избежать, необходимо было загрузить новую копию приложения и внести изменения, прежде чем пытаться запустить его в первый раз (мне сказали, что переименование приложения было бы достаточно, даже переименовав его, а затем снова обратно к оригиналу название).

К счастью, это означает, что все, что нам нужно сделать, это изменить имя словаря Java и изменить нашу настраиваемую программу запуска, чтобы она использовала новое имя словаря.