Преимущества / недостатки построения одной огромной банки, а не нескольких меньших? - PullRequest
8 голосов
/ 28 сентября 2010

Я видел такие программы, как http://one -jar.sourceforge.net / и http://fjep.sourceforge.net/index.html, способствующие сворачиванию вашего jar приложения и любых зависимостей в один исполняемый jar.

Каковы основные причины за или против этого?

Ответы [ 5 ]

9 голосов
/ 28 сентября 2010

Для:

  • упрощенное распространение,
  • устраняет проблему с classpath,
  • может быть упаковано даже в презентацию MS PowerPoint в виде интерактивного значка, вероятно, OpenOfficeтакже может с этим справиться.

Против:

  • сложная упаковка - иногда вы попадаете в угловой случай, такой как: как упаковать собственные расширения,
  • требуетдополнительный шаг сборки,
  • создает файлы большего размера,
  • может нарушить лицензионное соглашение библиотеки,
  • убивает понятие повторного использования библиотеки,
  • делает обновления и
  • отладка (из-за дополнительного загрузчика classpath) более сложная.

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

5 голосов
/ 28 сентября 2010

Одна законная причина, которую я видел на рабочем месте, связана с тем, что поставщик предоставляет банки исправлений, которые должны предшествовать исходной версии в пути к классам.
Однако это приложение запускается с помощью веб-запуска java (jnlp) и начиная с версии 6 Java, порядок зависимостей jar-файлов больше не гарантируется.
Поэтому единственный способ убедиться, что дублированные файлы классов находятся в правильной последовательности, - это переупаковать их в uber jar,сохранение последних исправленных файлов классов и удаление старых дубликатов.

4 голосов
/ 29 сентября 2010

Лицензии на перераспределение, применимые к зависимостям, являются одной из основных причин, препятствующих созданию «Uber» фляги.Когда создается jar-файл uber, происходит распределение любых зависимостей посредством распространения jar-файла uber.А в регионах, где прецедентное право не охватывает этот сценарий должным образом, можно открыться для ответственности.

Кроме того, некоторые коммерчески полученные зависимости могут запретить переупаковку зависимостей, особенно если оригиналраспространение не сохраняется.

PS: Это не юридическая консультация.Любой, кто читает это и зависит от этого для принятия деловых решений, должен проконсультироваться с юристом.

2 голосов
/ 29 сентября 2010

Для:

  • Объединение библиотек и собственного кода
  • Обеспечение правильного порядка выполнения элементов classpath во время выполнения
  • Устранение необходимости в установщиках

Против:

  • В новом загрузчике классов верхнего уровня могут возникать проблемы, не замеченные в ходе обычного цикла разработки
  • Законность переупаковки библиотек на разных условиях лицензии

В общем, если это небольшое служебное приложение, я соберу его в одну банку.Для более крупных приложений (которые, вероятно, в любом случае потребуются установщик) или, если это библиотека для других, я не буду беспокоиться.Это будет просто еще одно звено в цепочке вещей, которые могут сломаться.

1 голос
/ 28 сентября 2010

Распространение FTW!Это намного проще для пользователя, свернутого в один.

...