Какой лучший способ распространения приложений Java?
Ява - один из моих любимых языков программирования. Я всегда сталкиваюсь с проблемой распространения своего приложения среди конечных пользователей.
Предоставление пользователю JAR не всегда так удобно для пользователя, как хотелось бы, а для использования Java WebStart необходимо, чтобы я содержал веб-сервер.
Каков наилучший способ распространения приложения Java? Что если приложению Java необходимо установить артефакты на компьютер пользователя? Есть ли хорошие системы установки / упаковки Java?
16 ответов
Существуют различные решения в зависимости от ваших требований к распространению.
Просто используйте банку. Это предполагает, что у пользователя установлена правильная версия Java, в противном случае пользователь получит исключения "версия формата файла-класса". Это хорошо для внутреннего распространения внутри компании.
Используйте launch4j и инсталлятор, такой как NSIS. Это дает вам гораздо больший контроль, хотя пользователь все еще может делать глупые вещи, такие как удаление java-среды выполнения. Это, пожалуй, самый популярный подход, и то, что я сейчас использую.
Используйте Webstart. Это также предполагает, что у пользователя установлена правильная версия java, но намного легче начать работу. Мой опыт показывает, что это хорошо для жестко контролируемых сред интранета, но становится проблемой при больших развертываниях, потому что у него есть много странных сбоев. Это может стать лучше с новой технологией плагинов в Java 1.7.
Используйте компилятор с собственным кодом, такой как Excelsior JET, и распространяйте как исполняемый файл, или оборачивайте его в установщик. Дорогой, и он обычно связывает вас с немного более старой версией java, и при динамической загрузке классов возникают некоторые проблемы, но он очень эффективен для крупномасштабного развертывания, где вам нужно минимизировать трудности, связанные с поддержкой.
Расширенный установщик позволяет легко упаковать Java-приложения в исполняемые файлы Windows, и он достаточно гибок в настройке. Я обнаружил, что для распространения приложений Java клиентам Windows это самый простой способ.
JSmooth - это простая программа, которая берет ваш jar и упаковывает его в стандартный исполняемый файл windows. Он поставляется с простым графическим интерфейсом, который позволяет вам настроить необходимую JVM, связать ее с приложением или предоставить возможность загрузить ее, если она еще не установлена. Вы можете отправить exe-файл как есть или заархивировать его с возможными зависимостями (или позволить программе загружать дополнительные зависимости из сети при запуске). Это также бесплатно, как в пиве и речи, что может (или не может) быть хорошей вещью.
Это зависит от того, насколько сложны ваши целевые пользователи. В большинстве случаев вы хотите изолировать их от того факта, что вы используете приложение на основе Java. Дайте им собственный установщик, который делает правильные вещи (создает пункты меню "Пуск", запускает программы, регистрируется с помощью добавления / удаления программ и т. Д.) И уже связывает среду выполнения Java (так что пользователю не нужно знать об этом или заботиться о нем). Я хотел бы предложить наш кроссплатформенный инструмент установки, BitRock InstallBuilder. Хотя он не основан на Java, он обычно используется для упаковки приложений Java. Его можно легко интегрировать с Ant, и вы можете создавать установщики Windows из Unix/Linux/Mac и наоборот. Поскольку сгенерированные установщики являются собственными, они не требуют наличия шага самораспаковки или JRE, которые уже присутствуют в целевой системе, что означает меньшие установщики и избавляет вас от головной боли. Я также хотел бы отметить, что у нас есть бесплатные лицензии для проектов с открытым исходным кодом.
Если это приложение для конечного пользователя с графическим интерфейсом, вы должны игнорировать язык, на котором вы написали программу (Java), и использовать собственный установщик для каждой из выбранных вами платформ. Люди Mac хотят.dmg, а в Windows - установщик.msi или.exe. В Windows я предпочитаю NSIS от NullSoft только потому, что он менее нежелателен, чем InstallShield или InstallAnywhere. В OSX вы можете рассчитывать на JVM, уже находящуюся там. В Windows вам необходимо проверить и установить его для них, если это необходимо. Люди, работающие в Linux, не будут запускать приложения с графическим интерфейсом Java, и те немногие, которые будут, знают, что делать с исполняемым.jar.
Исполняемые файлы лучше, но они ограничены платформой, т.е. используйте gcj: http://gcc.gnu.org/java/ для linux для создания исполняемых файлов и используйте launch4j: http://launch4j.sourceforge.net/ для создания исполняемых файлов Windows. Для упаковки на Linux вы можете использовать любой RPM или Deb Packager. Для win32 попробуйте http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System
Хотя я не использовал NSIS (Nullsoft Scriptable Installer System) сам, есть сценарии установки, которые проверят, установлена ли необходимая JRE в целевой системе.
Многие примеры сценариев доступны на страницах примеров кода и установщиков реального мира, таких как:
(Обратите внимание, что я на самом деле не использовал ни один из сценариев, поэтому, пожалуйста, не принимайте это как одобрение.)
Мне нужен был способ упаковать мой проект и его зависимости в один файл JAR.
Я нашел то, что мне было нужно, используя плагин Maven2 Assembly: плагин Maven2 Assembly
Это похоже на дублирование функциональности one-jar, но не требует дополнительной настройки для его запуска.
Каков наилучший способ распространения приложения Java? Что если приложению Java необходимо установить артефакты на компьютер пользователя? Есть ли хорошие системы установки / упаковки Java?
По моему опыту (из оценки ряда вариантов), install4j является хорошим решением. Он создает собственные установщики для любой платформы и специально предназначен для установки приложений Java. Подробности см. В разделе " Особенности " на его веб-сайте.
install4j - это коммерческий инструмент. Особенно, если ваши потребности относительно просты (просто распространите приложение и установите некоторые артефакты), существует множество других полезных опций, включая бесплатные (например, izPack или уже упомянутый Lauch4j). Но вы спрашивали о лучшем способе, и, насколько мне известно, install4j - единственный, особенно для распространения более крупных или более сложных приложений Java (EE).
Я разрабатываю приложения RCP Eclipse. Обычно для запуска приложения Eclipse включается исполняемый модуль запуска. Я включил виртуальную машину Java в папку приложения в подкаталоге /jre, чтобы убедиться, что будет использоваться правильная версия Java.
Затем мы упаковываем Inno Setup для установки на компьютер пользователя.
Для простых приложений Java мне нравится использовать Jar's. Очень просто распространять один файл, по которому пользователь может просто щелкнуть (Windows), или
java -jar jarname.jar
ИМХО, баночка - путь, когда простота - главное требование.
installanywhere хороший, но дорогой - я не нашел (как) хороший бесплатный
Ну, с моей точки зрения, лучший механизм распространения заключается в использовании чего-то вроде ClickOnce или технологии WebStart. Вы просто развертываете версию на сервере, и она автоматически передается клиентам после выпуска версии. Кроме того, платформа Eclipse RCP содержит UpdateManager, который делает то же, что и WebStart, но и многое другое.
Поскольку я использую Maven2 для сборки, развертывание - это просто пирог: скопируйте встроенный файл jar в папку на сервере, обновите файл jnlp, если необходимо, и все готово.
Я бы заархивировал jar-файл вместе с другими зависимыми jar-файлами, файлами конфигурации и документацией вместе с run.bat/run.sh. Конечный пользователь должен иметь возможность разархивировать его в любое место и при необходимости отредактировать run.bat (в большинстве случаев он должен работать без редактирования). Установщик может быть полезен, если вы хотите создавать записи в меню "Пуск", на рабочем столе, в системном трее и т. Д.
Как пользователь, я предпочитаю разархивировать и запустить вид установки (без пунктов меню "Пуск", пожалуйста). Однако люди за пределами IT-индустрии могут иметь разные предпочтения. Поэтому, если приложение в значительной степени предназначено для разработчиков, zip-run.bat и приложения для широкой публики могут быть установлены с помощью установщика.