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

<p>ява - один из моих любимых языков программирования. я всегда сталкиваюсь с проблемой распространения своего приложения среди конечных пользователей.</p><p>предоставление пользователю jar не всегда так удобно для пользователя, как хотелось бы, и использование java webstart требует, чтобы я содержал веб-сервер.</p><p>каков наилучший способ распространения приложения java? что если приложению java необходимо установить артефакты на компьютер пользователя? есть ли хорошие java системы установки/упаковки?</p>

<p>существуют различные решения в зависимости от ваших требований к распространению.</p><ol> <li> <p>просто используйте банку. это предполагает, что у пользователя установлена правильная версия java, в противном случае пользователь получит исключения "версия формата класса". это хорошо для внутреннего распространения внутри компании.</p> </li> <li> <p>используйте launch4j и инсталлятор, такой как nsis. это дает вам гораздо больший контроль, хотя пользователь все еще может делать глупые вещи, такие как деинсталляция среды выполнения java. это, пожалуй, самый популярный подход, и то, что я сейчас использую.</p> </li> <li> <p>используйте webstart. это также предполагает, что у пользователя установлена правильная версия java, но начать работу намного проще. мой опыт показывает, что это хорошо для жестко контролируемых сред интранета, но становится проблемой при больших развертываниях, потому что у него много странных сбоев. это может стать лучше с новой технологией плагинов в java 1.7.</p> </li> <li> <p>используйте компилятор с собственным кодом, такой как excelsior jet, и распространяйте как исполняемый файл, или оборачивайте его в установщик. дорогой, и он обычно связывает вас с немного более старой версией java, и есть некоторая проблема с динамической загрузкой классов, но он очень эффективен для крупномасштабного развертывания, где вам нужно минимизировать ваши трудности поддержки.</p> </li> </ol>

<p> <a href="http://www.excelsior-usa.com/articles/java-to-exe.html">преобразовать java в exe - почему, когда, когда нет и как</a> </p>

<p> <a href="http://www.advancedinstaller.com/">расширенный установщик</a> позволяет упростить упаковку java приложений как исполняемые файлы windows, и он достаточно гибок в настройке. я обнаружил, что для распространения java приложений среди клиентов windows это самый простой способ.</p>

<p> <a href="http://jsmooth.sourceforge.net/">jsmooth</a> - простая программа, которая берет ваш jar и упаковывает его в стандартный исполняемый файл windows. он поставляется с простым графическим интерфейсом, который позволяет вам настроить необходимую jvm, связать ее с приложением или предоставить возможность загрузить ее, если она еще не установлена. вы можете отправить exe-файл как есть или заархивировать его с возможными зависимостями (или позволить программе загружать дополнительные зависимости из сети при запуске). это также бесплатно, как в пиве и речи, что может (или не может) быть хорошей вещью.</p>

<p>это зависит от того, насколько сложны ваши целевые пользователи. в большинстве случаев вы хотите изолировать их от того факта, что вы используете приложение на основе java. дайте им собственный установщик, который делает правильные вещи (создает пункты меню "пуск", программы запуска, регистрируется с помощью добавления/удаления программ и т.д.) и уже связывает время выполнения java (так что пользователю не нужно знать или заботиться об этом). я хотел бы предложить наш кроссплатформенный инструмент установки <a href="http://bitrock.com">bitrock installbuilder</a> . хотя он не основан на java, он обычно используется для упаковки java приложений. его можно легко интегрировать с ant, и вы можете создавать установщики windows из unix/linux/mac и наоборот. поскольку сгенерированные установщики являются собственными, они не требуют наличия шага самораспаковки или jre, которые уже присутствуют в целевой системе, что означает меньшие установщики и избавляет вас от головной боли. я также хотел бы отметить, что у нас есть бесплатные лицензии для проектов с открытым исходным кодом.</p>

<p>исполняемые файлы лучше, но они ограничены платформой, то есть используйте gcj: <a href="http://gcc.gnu.org/java/">http://gcc.gnu.org/java/</a> для linux для создания исполняемых файлов и используйте launch4j: <a href="http://launch4j.sourceforge.net/">http: // launch4j .sourceforge.net /</a> для создания исполняемых файлов windows. для упаковки на linux вы можете использовать любой rpm или deb packager. для win32 попробуйте <a href="http://en.wikipedia.org/wiki/nullsoft\_scriptable\_install\_system">http://en.wikipedia.org/wiki/nullsoft\_scriptable\_install\_system</a> </p>

<p>если это настоящее приложение для конечного пользователя с графическим интерфейсом, вы должны игнорировать язык, на котором вы написали программу (java), и использовать собственный установщик для каждой из выбранных вами платформ. люди mac хотят .dmg, а в windows - установщик .msi или .exe. в windows я предпочитаю nsis от nullsoft только потому, что он менее нежелателен, чем installshield или installanywhere. в osx вы можете рассчитывать на jvm, уже находящуюся там. в windows вам необходимо проверить и установить его для них, если это необходимо. пользователи linux не будут запускать java приложения с графическим интерфейсом, и те немногие, которые будут, знают, что делать с исполняемым файлом .jar.</p>

<p>хотя я и сам не использовал <a href="http://nsis.sourceforge.net/">nsis</a> (nullsoft scriptable installer system), есть сценарии установки, которые проверят, установлена ли необходимая jre в целевой системе.</p><p>многие примеры сценариев доступны на страницах <a href="http://nsis.sourceforge.net/category:code\_examples">примеры кода</a> и <a href="http://nsis.sourceforge.net/category:real\_world\_installers">установщики реального мира</a> , например:</p><ul> <li> <a href="http://nsis.sourceforge.net/java\_launcher\_with\_automatic\_jre\_installation">java launcher с автоматической установкой jre</a> </li> <li> <a href="http://nsis.sourceforge.net/simple\_java\_runtime\_download\_script">простой java сценарий загрузки во время выполнения</a> </li> </ul><p>(обратите внимание, что я на самом деле не использовал ни один из сценариев, поэтому, пожалуйста, не принимайте это как одобрение.)</p>

<p>мне нужен был способ упаковать мой проект и его зависимости в один файл jar.</p><p>я нашел то, что мне было нужно, используя плагин maven2 assembly: <a href="http://maven.apache.org/plugins/maven-assembly-plugin/descriptor-refs.html#jar-with-dependencies">плагин maven2 assembly</a> </p><p>похоже, что это дублирует функциональность <a href="http://one-jar.sourceforge.net/">one-jar</a> , но не требует дополнительной настройки для запуска.</p>

<p>для простых java приложений мне нравится использовать jar's. очень просто распространять один файл, на который пользователь может просто щелкнуть (windows), или</p><pre><code>java -jar jarname.jar </code></pre><p>имхо, баночка - путь, когда простота - главное требование.</p>

<p>я разрабатываю приложения eclipse rcp. обычно для запуска приложения eclipse в него входит исполняемый модуль запуска. я включил виртуальную машину java в папку приложения в подкаталоге/jre, чтобы обеспечить использование правильной версии java.</p><p>затем мы упаковываем inno setup для установки на компьютер пользователя.</p>

<blockquote> <p>каков наилучший способ распространения приложения java? что если приложению java необходимо установить артефакты на компьютер пользователя? есть ли хорошие java системы установки/упаковки?</p> </blockquote><p>по моему опыту (из <a href="https://stackoverflow.com/questions/759855/what-are-good-installanywhere-replacements-for-installing-a-java-ee-application/786307#786307">оценивая ряд опций</a> ), <a href="http://www.ej-technologies.com/products/install4j/overview.html">install4j</a> является хорошим решением. он создает собственные установщики для любой платформы и специально предназначен для установки приложений java. для получения дополнительной информации см. " <a href="http://www.ej-technologies.com/products/install4j/features.html">features</a> " на своем веб-сайте.</p><p>install4j - это коммерческий инструмент. особенно, если ваши потребности относительно просты (просто распространите приложение и установите некоторые артефакты), существует множество других полезных опций, включая бесплатные (например, <a href="http://izpack.org/">izpack</a> или уже упоминавшийся <a href="http://launch4j.sourceforge.net/">lauch4j</a> ) , но вы спросили <em> лучший </em> способ, и, насколько я знаю, install4j - единственный, особенно для распространения больших или более сложных java (ee) приложения.</p>

<p>лучший ответ зависит от платформы. для развертывания в windows у меня были хорошие результаты, используя комбинацию <a href="http://one-jar.sourceforge.net/">one-jar</a> и <a href="http://launch4j.sourceforge.net/">launch4j</a> . потребовалось немного времени, чтобы правильно настроить мою среду сборки (в основном скрипты ant), но теперь это довольно безболезненно.</p>

<p>ну, с моей точки зрения, лучший механизм распространения - это использовать что-то вроде <a href="http://en.wikipedia.org/wiki/clickonce">clickonce</a> или <a href="http://en.wikipedia.org/wiki/webstart">webstart</a> технология. вы просто развертываете версию на сервере, и она автоматически передается клиентам после выпуска версии. кроме того, платформа eclipse rcp содержит updatemanager, который делает то же, что и webstart, но и многое другое.</p><p>поскольку я использую maven2 для сборки, развертывание - это просто пирог: скопируйте встроенный файл jar в папку на сервере, обновите файл jnlp, если необходимо, и все готово.</p>

<p>installanywhere хороший, но дорогой - я не нашел (как) хороший бесплатный</p>