Java - один из моих языков программирования. Я всегда сталкиваюсь с проблемой распространения дистрибутива моего приложения конечным пользователям.
Предоставление пользователю JAR не всегда удобно, как хотелось бы, и использование Java WebStart требует, чтобы я поддерживал веб-сервер.
Каков наилучший способ распространения приложения Java? Что делать, если Java-приложение необходимо установить артефакты на компьютер пользователя? Есть ли хорошие системы установки / упаковки Java там?
Хотя я не использовал NSIS (Nullsoft Scriptable Installer System) самостоятельно, есть установочные скрипты, которые будут проверять, установлена ли требуемая JRE в целевой системе.
Доступны многие примеры скриптов из страниц NSIS и Real World Installers, таких как:
Java Launcher с автоматической установкой JRE Простой скрипт загрузки Java Runtime(Обратите внимание, что я раю Фактически я использовал какой-либо скрипт, поэтому, пожалуйста, не принимайте его как подтверждение.)
Это зависит от того, насколько утончены ваши целевые пользователи. В большинстве случаев вы хотите изолировать их от того, что вы используете Java-приложение. Дайте им встроенный установщик, который сделает все правильно (создайте записи в меню запуска, пусковые установки, зарегистрируйтесь с помощью программ для добавления / удаления и т. Д.) И уже связывает время выполнения Java (поэтому пользователю не нужно знать или заботиться об этом). Я хотел бы предложить наш инструмент для установки кросс-платформы BitRock InstallBuilder. Хотя он не основан на Java, он обычно используется для упаковки приложений Java. Его можно легко интегрировать с Ant, и вы можете создавать установщики Windows из Unix / Linux / Mac и наоборот. Поскольку созданные инсталляторы являются родными, им не требуется этап самоизвлечения или JRE, который уже присутствует в целевой системе, что означает меньшие установщики и сэкономит вам некоторые головные боли. Я также хотел бы упомянуть, что у нас есть бесплатные лицензии на проекты с открытым исходным кодом
Мне нужен способ для упаковки моего проекта и его зависимостей в один файл jar.
Я нашел то, что мне нужно, используя плагин сборки Maven2: Maven2 Assembly plugin
Это появляется чтобы дублировать функциональные возможности Maven2 Assembly plugin , но для его создания не требуется никакой дополнительной настройки.
Преобразование Java в EXE - почему, когда, когда нет и как
Для простых приложений Java мне нравится использовать Jar's. Очень просто распространять один файл, который пользователь может просто щелкнуть (Windows), или
java -jar jarname.jar
IMHO, jar - это путь, когда простота является основным требованием.
Я разрабатываю приложения RCP для eclipse. Обычно для запуска приложения eclipse включена исполняющая программа запуска. Я включаю java-виртуальную машину внутри папки приложения в подкаталог / jre, чтобы убедиться, что будет использоваться правая версия java.
Затем мы упаковываем с Inno Setup для установки на машине пользователя.
Advanced Installer позволяет легко упаковывать java-приложения в качестве исполняемых файлов Windows, и это довольно гибко в том, как вы можете его настроить. Я обнаружил, что для распространения приложений Java для клиентов Windows это самый простой способ.
Если это реальное приложение для конечного пользователя с графическим интерфейсом, вы должны игнорировать lanaguage, в котором вы написали программу (Java), и использовать собственный установщик для каждой из выбранных вами платформ. Пользователи Mac хотят, чтобы .dmg и на windows был установлен MSI или установщик .exe. В Windows я предпочитаю NSIS из NullSoft только потому, что это менее нежелательно, чем InstallShield или InstallAnywhere. В OSX вы можете рассчитывать на то, что JVM уже существует. В Windows вам нужно будет проверить и установить их для них, если это необходимо. Пользователи Linux не будут запускать приложения Java GUI, а некоторые из них будут знать, что делать с исполняемым .jar.
JSmooth - это простая программа, которая берет вашу банку и обертывает ее в стандартный исполняемый файл Windows. Он поставляется с простым графическим интерфейсом, который позволяет вам настроить требуемую JVM, связать ее с приложением или предоставить возможность загрузить ее, если она еще не установлена. Вы можете отправить exe-файл как есть или закрепить его с помощью возможных зависимостей (или позволить программе загружать дополнительные зависимости из сети при запуске). Это также бесплатно, как в пиве и речи, что может (или не может) быть хорошим.
исполняемые файлы лучше всего, но они ограничены платформой, то есть используйте gcj: http://gcc.gnu.org/java/ для linux для создания исполняемых файлов и используйте start4j: http://launch4j.sourceforge.net/ для создания окон исполняемые файлы. Чтобы пакет на linux вы можете использовать любой rpm или deb packager. Для win32 попробуйте http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System
По моему опыту (от оценки ряда опций), install4j является хорошим решением. Он создает собственные инсталляторы для любой платформы и специально предназначен для установки приложений Java. Подробнее см. «Возможности» на своем веб-сайте.
install4j - это коммерческий инструмент. Особенно, если ваши потребности относительно просты (просто распространяйте приложение и устанавливайте некоторые артефакты), существует много других хороших вариантов, включая бесплатные (например, , оценивающие ряд опций или уже упомянутый Lauch4j). Но вы просили наилучшего способа, и моим текущим знаниям является install4j, особенно для распространения более крупных или более сложных приложений Java (EE).
Ну, с моей точки зрения, превосходный механизм распределения - это использовать что-то вроде технологии ClickOnce или WebStart. Вы просто развертываете версию на сервере и автоматически получаете ее клиентам при выпуске версии. Также платформа Eclipse RCP содержит UpdateManager, который делает то, что делает WebStart, но также и многое другое.
Поскольку я использую Maven2 для сборки, развертывание - это всего лишь кусок торта: скопируйте встроенную банку в место на сервер, обновите файл jnlp, если это необходимо, и вы закончите.
Лучший ответ зависит от платформы. Для развертывания в Windows у меня были хорошие результаты, используя комбинацию one-jar и launch4j. Потребовалось немного времени, чтобы настроить среду сборки (в основном, скрипты ant), но теперь это довольно безболезненно.
Я бы закрепил файл jar вместе с другими зависимыми баночками, файлами конфигурации и документацией вместе с run.bat / run.sh. Конечный пользователь должен иметь возможность разархивировать его в любое место и, если необходимо, отредактировать run.bat (он должен работать без редактирования в большинстве случаев). Установщик может быть полезен, если вы хотите создавать записи в меню «Пуск», на рабочем столе, в системном трее и т. Д.
Как пользователь, я предпочитаю разархивировать и запускать вид установки (без записей в меню «Пуск»). Однако люди вне ИТ-индустрии могут иметь разные предпочтения. Поэтому, если приложение в значительной степени предназначено для разработчиков, маршрут zip-run.bat и приложения для широкой публики могут быть установлены с помощью установщика.
installanywhere хорошо, но дорогой - я не нашел (как) хороший бесплатный