Каков наилучший способ упаковки Java-приложения с большим количеством зависимостей? - PullRequest
12 голосов
/ 19 ноября 2008

Я пишу Java-приложение, использующее eclipse, которое ссылается на несколько внешних jar-файлов и требует, чтобы некоторые файлы конфигурации были доступны для пользователя.

  1. Как лучше всего упаковать его для развертывания?

  2. Насколько я понимаю, вы не можете поместить Jars в другой файл jar, это правильно?

  3. Могу ли я сохранить свои файлы конфигурации вне банок и по-прежнему ссылаться на них в коде? Или путь к файлу конфигурации должен быть аргументом командной строки?

  4. Существуют ли какие-либо сторонние плагины для затмения, чтобы помочь сделать это проще? Я сейчас использую файл сборки ant, но не уверен, что знаю, что делаю.

  5. Существует ли в Visual Studio такое же количество проектов развертывания, которые определят все, что вам нужно, и просто сделают установщик? Я использовал install4j и раньше, и он был мощным, если не близко, таким же автоматическим, как проекты развертывания .Net.

Приветствие.

Ответы [ 7 ]

6 голосов
/ 19 ноября 2008

(1) Альтернативой муравью, которую вы можете рассмотреть, является maven .

Краткое введение в Maven можно найти здесь .

Для создания JAR у maven есть плагин jar , который может автоматизировать процесс обеспечения того, чтобы все зависимые банки были указаны в манифесте вашей банки.

Если вы используете eclipse, скачайте maven интеграции .

(2) Другой альтернативой является использование OneJar (заявление об отказе: сам не пробовал).

6 голосов
/ 19 ноября 2008

Нет ни одного «лучшего пути». Это зависит от того, используете ли вы приложение Swing, веб-запуск, апплет, библиотеку или веб-приложение. Каждый отличается.

По пункту 2 вы правы. Файлы JAR не могут содержать другие файлы JAR. (Ну, технически они могут, просто внутренний файл jar не будет находиться на вашем пути к классам, что означает, что файлы jar не содержат файлы jar).

В пункте 3 вы, безусловно, можете ссылаться на файлы конфигурации вне файла jar. Обычно вы можете ссылаться на файл конфигурации как файл или ресурс. Если вы используете ресурсный подход, он обычно исходит из classpath (может быть в jar). Если вы используете файл, то вы указываете имя файла (не в банке).

Как правило, большинство разработчиков Java используют Apache Ant для развертывания. Это хорошо документировано, так что посмотрите.

3 голосов
/ 28 ноября 2008

Вы должны попробовать FatJar . Это плагин Eclipse, который одним щелчком правой кнопкой мыши на Project может создать файл JAR со всем необходимым для запуска приложения, включая необходимый JAR стороннего производителя.

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

3 голосов
/ 19 ноября 2008

Ответы различаются в зависимости от того, что вы создаете.

Если вы создаете библиотеку, лучше всего распространять вашу работу в виде jar-файла. Можно сослаться на ваши зависимости jar через атрибут Class-path в вашем манифесте jar, хотя я обычно думаю, что это не круто. Этот атрибут был разработан для апплетов, и он довольно редко используется в библиотеках, поэтому, когда этот метод помещает материал в путь к классам (особенно распространенный материал, который пользователь уже может использовать), вы можете получить неожиданные конфликты версий. И трудно отследить, почему вы их видите.

Публикация jar в репозитории Maven с информацией pom для отслеживания зависимостей также является отличным выбором для библиотек. Если вы это сделаете, пожалуйста, опубликуйте ваши координаты Maven в ваших документах!

Если вы создаете приложение, два популярных варианта - распространять zip / tar / что-либо из структуры развертывания ИЛИ использовать программу установки. Если программа представляет собой серверную вещь, первая встречается гораздо чаще. Последнее чаще встречается у клиентов. Как правило, программа установки просто планирует структуру развертывания и, возможно, выполняет некоторые дополнительные задачи, такие как установка в определенных местах ОС.

Чтобы построить структуру развертывания (она же «комплект»), вы захотите создать повторяемый процесс в любой системе сборки, которую вы используете. У Ant есть обильные примеры этого, а у Maven есть плагины сборки, которые могут помочь. Как правило, вы захотите включить банку своего кода, любые зависимости, сценарии для запуска программы, возможно, JRE, и любые другие ресурсы, которые вам могут понадобиться.

Если вы хотите создать установщик, есть много вариантов, как бесплатных, так и коммерческих. У некоторых людей, которых я знаю, недавно был хороший опыт использования бесплатного IzPack , но проверьте свои возможности.

1 голос
/ 20 ноября 2008

Хорошо, если вы говорите о развертывании автономного настольного приложения:

Прежде чем мы переключились на запуск через Интернет мы создали три архива развертывания, один для Windows, один для Mac и один для других платформ.

В Windows мы успешно использовали Скриптную систему установки Nullsoft (известную своей работой в более старых версиях winamp) и ant task , хотя некоторые недостатки:

  • Используется только на окнах AFAIR
  • Вы должны выполнить некоторую работу вручную, т.е. настроить созданный мастером скрипт AFAIR

С другой стороны, он может создать установку Windows с пунктами меню Пуск. Также существует плагин eclipse для редактирования встроенного сценария оболочки NSIS.

В Mac OS X существует ant задача для создания .app-файла из ваших java-файлов, чтобы вы могли запускать его как родное приложение для OS x. Но остерегайтесь не записывать какие-либо настройки в домашнюю директорию и использовать вместо этого директорию приложения.

Для других вы должны ожидать, что они находятся в un * x env, и развертывать ваше приложение с помощью сценария оболочки для запуска приложения.

В любом случае вам может потребоваться развернуть пользовательский файл политики , чтобы получить права доступа для вашего приложения.

Если вы хотите избавиться от всей упаковки и прочего, вам следует серьезно подумать об использовании web start . Мы сэкономили много времени с момента перехода на него, то есть упростили процесс развертывания, позаботились об обновлениях и т. Д.

Обновление 2014

Используйте плагин сборки maven , см. Раздел «Создание исполняемого фляги»

0 голосов
/ 19 ноября 2008

Вы можете посмотреть другие java-проекты (например, JMeter, SquirrelSQL, JEdit, Cernunnos и т. Д.). У каждого пакета свои приложения немного по-своему, поэтому при рассмотрении этих вопросов учитывайте свои цели.

0 голосов
/ 19 ноября 2008

Ant. Это не лучшая вещь в мире, но она стандартная, это apache, и она работает. В Интернете есть несколько хороших примеров, как сделать простой build.xml для любого, и у него есть некоторые функции, такие как задача 'war', которая знает, как поместить все основные вещи (классы, web.xml и т. Д.) В файл jar. для тебя. Вы также можете сказать ему, чтобы он взял другие файлы конфигурации и фляги, и он с радостью сделает это. Это также очень умно о том, что компилировать. Вы даете ему каталог, и он находит все java-файлы и создает их только в том случае, если их классный файл устарел, поэтому вы без особых усилий получаете некоторые традиционные функции make.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...