Подтвердить что ты не робот

Как доставить мое приложение Java с конкретной JRE?

Кто-нибудь знает, как упаковать определенную JRE вместе с скомпилированным Java-приложением? В настоящее время у меня есть исполняемый файл jar и я хочу добавить в него JRE 6 Update 31. Чтобы приложение использовало JRE, независимо от того, какая версия JRE установлена ​​клиентом. Решение должно работать независимо от платформы.

Любые идеи? Большое спасибо заранее!

4b9b3361

Ответ 1

В OSX они отходят от Apple, предоставляя Java для Oracle, предоставляющего Java, это также означает, что Java не будет установлен при новой установке OSX. Oracle предоставила инструмент для упаковки установок Java, и они сильно рекомендуют предоставлять jre как часть вашей установки. Преимущество этого заключается в том, что клиенту не нужно будет устанавливать дополнительный пакет для запуска вашего приложения, и вы можете протестировать свое приложение против правильной Java-среды выполнения для вас и убедиться, что перед отправкой нет никаких неудобств. Отказ в том, что создание установщика немного сложнее и размер загрузки больше.

Конечно, установщики установки становятся более сложными, если вы хотите предоставить свои приложения для Windows, Linux ectera, и было бы гораздо проще просто предоставить исполняемый банку, но это не тот опыт, которого хотят клиенты. Клиенты не ожидают, что смогут загрузить одно приложение и запустить один и тот же exe на windows, osx и linux. Они счастливы
иметь разные установщики для каждой платформы, а также ожидать, что установщики будут работать по-другому.

Вот как я это делаю:

OSX: используйте AppBundler со связанным jre, помещенным в Dmg с DMGCanvas. Пользователь просто перетаскивает приложение в свою папку /Application.

Windows: используйте Izpack с пакетом jre, завернутым в start4j, поэтому установщик может быть запущен как exe.

Linux: используйте Izpack без встроенного jre, так как пользователи пользователей Linux любят контролировать то, что на их машине, но указывают минимальную версию Java. В идеале я должен создавать пакеты для основных менеджеров пакетов Linux, таких как rpm, но Ive решил, что на данный момент это не стоит усилий, поскольку пользователи Linux составляют небольшой процент от моей клиентской базы.

Большая часть установки автоматизирована с использованием Maven и Ant, поэтому не стоит прилагать больших усилий для создания этих разных инсталляторов.

Ответ 2

Если у вас установлена ​​jre на целевой платформе, скажем, 64-разрядная версия Windows, просто скопируйте все в папку jre в вашей Java-установке и поместите ее в свой дистрибутив. Затем создайте командный файл, чтобы указать на локальный jre, а не на системный.

Вот что я делаю:

  • мой файл jar находится в папке dist
  • скопируйте папку jre в систему dist\jre-win-1.7.0_04
  • создать файл .bat со следующей строкой в ​​нем jre-win-1.7.0_04\bin\java.exe -jar MyProgram.jar

.. бум, сделано! Дважды щелкните командный файл и запустите файл jar с локальным jre. Чтобы убедиться в этом, удалите систему jre и дважды щелкните командный файл. Все еще работает.

Вы можете сделать это в Linux или OS X аналогичным образом.

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

Однако есть некоторые оговорки. Это делает ваш дистрибутив более крупным и зависимым от платформы, в моем примере Windows x64. Однако это выполнимо и управляемо. Существует ограниченное число платформ, поддерживаемых jre, и угадайте, что... они тоже зависят от платформы.

Ответ 3

Мы имеем такую ​​же ситуацию с коммерческим продуктом в производстве. Мы загрузили оба окна и Linux JRE определенной версии и упаковали их с помощью IzPack.

"Наша" JRE "должна быть установлена, если вы хотите установить приложение, и приложение запускается этой JRE независимо от установленной системой JRE или JDK.

Недостатком является: установщик должен быть создан для Windows или Linux и размером ~ 50 МБ. Размеры модулей при распаковке:

  • само приложение ~ 5 МБ
  • libs ~ 10 МБ
  • JRE ~ 90 МБ

Если бы я хотел сделать его более "независимым от платформы", мне пришлось бы упаковывать обе версии JRE, которые для установщика были бы ~ 100 МБ. И это все равно будет справедливо только для двух типов платформ (см. Ответ Cthulhu).

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

Ответ 4

Посмотрите, планируете ли вы распространять этот пакет (ваше приложение + JRE), тогда есть утилита install4J, которая является мощным многоплатформенным разработчиком установщика Java который генерирует собственные установщики и пусковые установки приложений для приложений Java.

Ответ 5

Вы можете развернуть его с помощью java webstart, который позволяет вам загрузить определенную версию jre, если она отсутствует. Однако я не знаю, возможно ли понижение. Java тоже должен быть установлен.

Ответ 6

Довольно новое решение, предоставляемое Oracle, находится здесь:

Самостоятельная упаковка

Он гласит:

Отдельные пакеты приложений обеспечивают следующие преимущества:

  • Пользователи устанавливают приложение с помощью знакомого им установщика и запускают его обычным способом.

  • Вы управляете версией JRE, используемой приложением.

  • Приложения могут быть развернуты в новых системах без необходимости установки JRE.

Но недостатком такого подхода является:

Автономные пакеты приложений могут быть созданы только с помощью JDK 7 Update 6 или более поздней версии.

Ответ 7

Вам нужны платформы-специфические пусковые установки, в которых используется JRE, размещенная рядом с файлом JAR. Конечно, вы можете сделать это с помощью командных файлов и сценариев оболочки, но есть более профессиональные решения, которые создают собственные пусковые установки, такие как install4j. (Отказ от ответственности: моя компания разрабатывает install4j). Свободное решение izpack.

Ответ 8

Это невозможно. Чтобы это было возможно, вам нужно загрузить VM для каждой платформы. Для Windows скопируйте JRE в каталог и банку и вызовите распределенную JVM с помощью сценариев оболочки. Но это так сложно, и решение, описанное Cthulhu, лучше всего, то есть проверить версию и указать веб-страницу.

Однако некоторые из них вы можете проверить.

JSmooth - http://jsmooth.sourceforge.net/

Jar2Exe - http://transfer2pc.weebly.com/1/post/2011/10/jar2exe-converter-11-gui.html