Каков наилучший способ распространения приложений Java?

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

Предоставление пользователю JAR не всегда удобно, как хотелось бы, и использование Java WebStart требует, чтобы я поддерживал веб-сервер.

Каков наилучший способ распространения приложения Java? Что делать, если Java-приложение необходимо установить артефакты на компьютер пользователя? Есть ли хорошие системы установки / упаковки Java там?

В зависимости от ваших требований к дистрибуции существует множество решений.

  1. Просто используйте банку. Это предполагает, что у пользователя установлена ​​правильная версия java, иначе пользователь получит исключения «версия в формате classа». Это нормально для внутреннего распространения внутри компании.

  2. Используйте launch4j и установщик, такой как NSIS. Это дает вам гораздо больше контроля, хотя пользователь все равно может делать глупые вещи, такие как un-installation java runtime. Это, вероятно, самый популярный подход и то, что я сейчас использую.

  3. Используйте Webstart. Это также предполагает, что у пользователя установлена ​​правильная версия java, но ее намного легче добиться. Мой опыт в том, что это нормально для жестко контролируемых сред интрасети, но становится болью с большими развертываниями, потому что у него есть много странных сбоев. Это может стать лучше с новой подключаемой технологией в Java 1.7.

  4. Используйте компилятор с собственным кодом, например Excelsior JET, и распространяйте его как исполняемый файл или завершите его установщиком. Дорого, и это, как правило, связывает вас со слегка устаревшей версией java, и есть немного боли при динамической загрузке classов, но она очень эффективна для крупномасштабного развертывания, где вам нужно минимизировать ваши проблемы с поддержкой.

Преобразование Java в EXE – почему, когда, когда нет и как

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

JSmooth – это простая программа, которая берет вашу банку и завершает ее в стандартный исполняемый файл Windows. Он поставляется с простым графическим интерфейсом, который позволяет вам настроить требуемую JVM, связать ее с приложением или предоставить возможность загрузить ее, если она еще не установлена. Вы можете отправить exe-файл как есть или закрепить его с помощью возможных зависимостей (или позволить программе загружать дополнительные зависимости из сети при запуске). Это также бесплатно, как в пиве и речи, что может (или не может) быть хорошим.

Это зависит от того, насколько сложны ваши целевые пользователи. В большинстве случаев вы хотите изолировать их от того, что вы используете Java-приложение. Дайте им встроенный установщик, который сделает все правильно (создайте записи в меню запуска, пусковые установки, зарегистрируйтесь с помощью программ для добавления / удаления и т. Д.) И уже связывает время выполнения Java (поэтому пользователю не нужно знать или заботиться об этом). Я хотел бы предложить наш инструмент для установки кросс-платформы BitRock InstallBuilder . Хотя он не основан на Java, он обычно используется для упаковки приложений Java. Его можно легко интегрировать с Ant, и вы можете создавать установщики Windows из Unix / Linux / Mac и наоборот. Поскольку созданные инсталляторы являются родными, им не требуется этап самоизвлечения или JRE, который уже присутствует в целевой системе, что означает меньшие установщики и сэкономит вам некоторые головные боли. Я также хотел бы упомянуть, что у нас есть бесплатные лицензии на проекты с открытым исходным кодом

исполняемые файлы лучше всего, но они ограничены платформой, то есть используйте gcj: http://gcc.gnu.org/java/ для linux для создания исполняемых файлов и используйте start4j: http://launch4j.sourceforge.net/ для создания исполняемых файлов Windows. Чтобы пакет на linux вы можете использовать любой rpm или deb packager. Для win32 попробуйте http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System

Если это приложение с конечным пользователем с графическим интерфейсом, вы должны игнорировать lanaguage, в котором вы написали программу (Java), и использовать собственный установщик для каждой из выбранных вами платформ. Пользователи Mac хотят, чтобы .dmg и на windows был установлен MSI или установщик .exe. В Windows я предпочитаю NSIS из NullSoft только потому, что это менее нежелательно, чем InstallShield или InstallAnywhere. В OSX вы можете рассчитывать на то, что JVM уже существует. В Windows вам нужно будет проверить и установить их для них, если это необходимо. Пользователи Linux не будут запускать приложения Java GUI, а некоторые из них будут знать, что делать с исполняемым .jar.

Хотя я сам не использовал NSIS (Nullsoft Scriptable Installer System), есть установочные скрипты, которые будут проверять, установлена ​​ли требуемая JRE в целевой системе.

Многие примеры скриптов доступны на страницах примеров кода и Real World Installers , таких как:

  • Java Launcher с автоматической установкой JRE
  • Простой сценарий загрузки Java Runtime

(Обратите внимание, что я на самом деле не использовал ни один из скриптов, поэтому, пожалуйста, не принимайте это как подтверждение.)

Мне нужен был способ упаковки моего проекта и его зависимостей в один файл jar.

Я нашел то, что мне нужно, используя плагин сборки Maven2 : Maven2 Assembly plugin

Это, похоже, дублирует функциональность одной банки , но не требует никакой дополнительной настройки, чтобы добиться ее.

Для простых приложений Java мне нравится использовать Jar’s. Очень просто распространять один файл, который пользователь может просто щелкнуть (Windows), или

java -jar jarname.jar 

IMHO, jar – это путь, когда простота является основным требованием.

Я разрабатываю приложения RCP для eclipse. Обычно для запуска приложения eclipse включена исполняющая программа запуска. Я включаю виртуальную машину java в папку приложения в подкаталоге / jre, чтобы убедиться, что будет использоваться правая версия java.

Затем мы устанавливаем пакет с установкой Inno для установки на машине пользователя.

Каков наилучший способ распространения приложения Java? Что делать, если Java-приложение необходимо установить артефакты на компьютер пользователя? Есть ли хорошие системы установки / упаковки Java там?

По моему опыту (от оценки ряда опций ), install4j является хорошим решением. Он создает собственные инсталляторы для любой платформы и специально предназначен для установки приложений Java. Подробнее см. « Особенности » на своем веб-сайте.

install4j – это коммерческий инструмент. Особенно, если ваши потребности относительно просты (просто распространяйте приложение и устанавливайте некоторые артефакты), существует много других хороших вариантов, включая бесплатные (например, izPack или уже упомянутый Lauch4j ). Но вы просили наилучшего способа, и моим текущим знаниям является install4j, особенно для распространения более крупных или более сложных приложений Java (EE).

Лучший ответ зависит от платформы. Для развертывания в Windows у меня были хорошие результаты, используя комбинацию one-jar и launch4j . Потребовалось немного времени, чтобы настроить среду сборки (в основном, скрипты ant), но теперь это довольно безболезненно.

С моей точки зрения, превосходный механизм распределения – использовать что-то вроде технологии ClickOnce или WebStart . Вы просто развертываете версию на сервере и автоматически получаете ее клиентам при выпуске версии. Также платформа RCP Eclipse содержит UpdateManager, который делает то, что делает WebStart, но также и многое другое.

Поскольку я использую Maven2 для построения, развертывание – всего лишь кусок торта: скопируйте встроенную банку в место на сервере, обновите файл jnlp, если это необходимо, и вы закончите.

installanywhere хорошо, но дорого – я не нашел (как) хороший бесплатный

Я бы закрепил файл jar вместе с другими зависимыми баночками, файлами конфигурации и документацией вместе с run.bat / run.sh. Конечный пользователь должен иметь возможность разархивировать его в любое место и, если необходимо, отредактировать run.bat (он должен работать без редактирования в большинстве случаев). Установщик может быть полезен, если вы хотите создавать записи в стартовом меню, на рабочем столе, в системном трее и т. Д.

В качестве пользователя я предпочитаю разархивировать и запускать вид установки (без ввода начального меню). Однако люди вне ИТ-индустрии могут иметь разные предпочтения. Поэтому, если приложение в значительной степени предназначено для разработчиков, маршрут zip-run.bat и приложения для широкой публики могут быть установлены с помощью установщика.

Interesting Posts

С помощью встроенного редактирования jqGrid с URL-адресами RESTful?

Обновите Node.js до последней версии на Mac OS

Плохая производительность и странное поведение с момента обновления Windows 10 Creators

Как работают SETLOCAL и ENABLEDELAYEDEXPANSION?

Почему не все приложения «переносимы»?

можете ли вы разместить частный repository для своей организации для использования с npm?

Могу ли я установить две разные версии Visual Studio на одном компьютере?

Двойная итерация в понимании списка

Как отключить пароль экрана блокировки Windows 10 только для IDLE

Настроить десятичный разделитель в импортированных диаграммах

помещая математические символы и индексы, смешанные с регулярными буквами в R / ggplot2

Является ли stream статического конструктора C # безопасным?

java.lang.ClassNotFoundException: com.mysql.jdbc.Driver в Eclipse

Получение беспроводной связи для Arch Linux

Как узнать, кто использует мой общий доступ к подключению Интернета (ICS)?

Давайте будем гением компьютера.