Использование JRE на OSX

В течение некоторого времени наше Java-приложение поставляется в комплекте с JRE на Windows. У нас есть небольшое приложение для запуска, написанное на C, которое заставляет приложение использовать нашу предварительно связанную JRE. Теперь, когда Apple крестовый поход, чтобы медленно убить Java, мы решили, что было бы разумно что-то подобное на OSX. Какой был бы лучший способ использовать предварительно подключенную JRE на OSX?

Ответы

Ответ 1

Даже если я нахожу это плохой идеей (см. ниже), вы можете просто объединить JVM, например OpenJDK, а затем запустить приложение с помощью небольшого script, вызывающего ваш исполняемый файл java.

Примечание. Я не знаю, разрешено ли перераспределение JVM (законное), вы должны проверить соглашение перед загрузкой

  • Первая проблема, с которой вы столкнулись, заключается в том, что на данный момент есть только версия Apple или Oracle Java 7u6 Mac OS X Port Developer Preview Release (это просто предварительный просмотр). (например, http://jdk7.java.net/macportpreview/). Это изменится в будущем, когда Apple перестанет поставлять свою собственную версию. Таким образом, на данный момент вы застряли в предварительном просмотре только на льве. Но я покажу вам пример.

  • Загрузите программу установки, смонтируйте образ диска, щелкните правой кнопкой мыши по плагину, выберите "Показать содержимое пакета", извлеките папку Home, он содержит JRE

  • Затем вы можете проверить с помощью

    $ ./Home/bin/java
    java version "1.7.0_06-ea"
    Java(TM) SE Runtime Environment (build 1.7.0_06-ea-b18)
    Java HotSpot(TM) 64-Bit Server VM (build 23.2-b08, mixed mode)
    

    Я бы тогда переименовал Home в нечто вроде jre

  • Если вы упаковываете эту папку в свое приложение, вам просто нужно будет добавить небольшой script с

    #!/bin/sh
    ./jre/bin/java -classpath myniceapplication.jar
    
  • Чтобы иметь возможность создавать приложение, вам понадобится папка applicationname.app/Contents/MacOS, содержащая вас script (который должен иметь имя applicationname).

  • Теперь кажется, что вам нужны абсолютные пути в этих сценариях

    /Path/applicationname.app/Contents/MacOS/jre/bin/java -classpath myniceapplication.jar
    

    Я полагаю, что есть лучшее решение для создания пакета приложений для Mac OS X, но я не эксперт. Этот пример должен был показать, что он может работать.

Резюмируя:

  • Проверьте, разрешено ли перераспределение JRE (и проверьте, какие условия)

  • Я бы этого не сделал, так как вам нужно будет обновлять его и обновлять свое приложение каждый раз, когда есть обновление безопасности JRE

  • Как пользователь, я бы больше доверял Oracle, чем случайному разработчику (ничего личного:-), чтобы получить JRE

Ответ 2

Я автор сообщения в блоге, связанного с @Даниэлем в его ответе. Я успешно связал OpenJDK и опубликовал приложение Java в Mac App Store.

Во-первых, позвольте мне исправить некоторые вопросы в принятом ответе.

  • Совершенно законно связывать OpenJDK и распространять его.
  • OpenJDK не работает только на Lion, я использовал его на pre-Lion до Mountain Lion. Он должен быть исправлен для работы с 32-разрядной ОС.
  • OpenJDK находится в бета-версии, но все же приемлемо для запуска сложного приложения Swing. В OSX есть несколько проблем, но я описал, как их исправлять в этом сообщении.

Нет необходимости создавать какие-либо script, как описано в ответе @Matteo, вы можете использовать приложение AppBundler, опубликованное Oracle, для создания собственного исполняемого файла который запустит ваше приложение и создаст собственный пакет. AppBundler также создаст файл Info.plist, содержащий информацию о том, как запустить приложение, например, имя исполняемого файла для запуска, аргументы Java и т.д.

От 10.7.5 и выше ваше приложение должно быть совместимым с Gatekeeper и подписано (так что вы должны записаться в платную программу для разработчиков Mac), если вы не хотите, чтобы в диалоговом окне говорилось, что ваше приложение связано с неопознанным разработчиком, пользователь сначала открывает его.

Для развертывания в App Store ваше приложение также должно работать в изолированной среде, но это не является строгим требованием, если вы распространяете его за пределами App Store.

Обратите внимание, что AppBundler не имеет некоторых полезных функций, вас может заинтересовать этот вилка.

Ответ 3

В этом сообщении в блоге содержатся некоторые подробные инструкции об объединении JRE в вашем приложении и его отправке в App Store.