2008-11-19 2 views
12

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

  1. Каков наилучший способ его упаковки?

  2. Я понимаю, что вы не можете положить банки в другой файл jar, это правильно?

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

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

  5. Есть ли эквивалент проектов развертывания в Visual Studio, который будет определять все, что вам нужно, и просто сделать установщик? Раньше я использовал install4j, и он был мощным, если бы не где-то рядом с автоматизированным проектом .Net.

Cheers.

ответ

6

Нет никакого «лучшего способа». Это зависит от того, развертываете ли вы приложение swing, webstart, апплет, библиотеку или веб-приложение. Все разные.

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

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

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

+0

В пункте 5 Maven (хотя требует некоторой конфигурации, но не много), управляет вашими зависимостями. – 2008-11-19 16:34:19

0

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

+0

Если вы собираетесь проголосовать за парня по крайней мере, чтобы сообщить мне, почему это плохой совет? – 2008-11-19 15:20:37

6

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

Краткое введение в maven можно найти here.

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

Если вы используете eclipse, загрузите maven integration.

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

+0

Учитывая, что вы используете автономное приложение из звуков этого OneJar, я бы назвал свою рекомендацию. Одно из преимуществ заключается в том, что он позволит вам запустить приложение в Windows, дважды щелкнув на банке. – 2008-11-20 06:02:13

0

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

3

Ответы различаются в зависимости от того, какую вещь вы строите.

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

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

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

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

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

1

Ну, если вы говорите о развертывании отдельного приложения рабочего стола:

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

На окна мы успешно используется Nullsoft Scriptable Install System (известен его использования путем ранних версий Winamp) и его ant task, хотя некоторые недостатки:

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

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

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

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

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

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

Update 2014

Использования maven assembly plugin, смотрите раздел «Создание исполняемой баночки»

3

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

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