Что такое Uber Jar?

251

Я читаю документацию Maven и натолкнулся на название «uber-jar».

Что означает Uber-Jar и каковы его особенности / преимущества?

Ашай Батвал
источник
14
Другой термин для "Uber Jar" или "Super Jar" - "толстый кувшин". См. Stackoverflow.com/questions/19150811/… .
erwaman
Я также иногда видел, что это называется "onejar" или "one-jar".
Джин Брукстра

Ответы:

357

Überэто немецкое слово для aboveили over(это на самом деле родственный с английским over).

Следовательно, в этом контексте uber-jar - это «over-jar», на один уровень выше простого JAR (a) , определяемого как тот, который содержит и ваш пакет, и все его зависимости в одном файле JAR. Можно предположить, что название происходит от того же самого конфига, что и ultrageek, superman, гиперпространство и метаданные, которые имеют схожие значения «за пределами нормы».

Преимущество состоит в том, что вы можете распространять свой uber-jar и вообще не заботиться о том, установлены ли зависимости в месте назначения, так как ваш uber-jar фактически не имеет зависимостей.

Все зависимости ваших собственных вещей внутри uber-jar также находятся внутри этого uber-jar. Как и все зависимости этих зависимостей. И так далее.


(a) Мне, вероятно, не нужно объяснять, что такое JAR для разработчика Java, но я приведу его для полноты. Это архив Java, в основном один файл, который обычно содержит несколько файлов классов Java вместе с соответствующими метаданными и ресурсами.

paxdiablo
источник
Странно ... Я немец и конечно знаю слово "über" и значение. Но почему это используется здесь в контексте Maven? В этом случае это означает, что одна или несколько вещей собраны вместе и доступны через сгенерированный jar. К сожалению, этот намек не помог мне решить проблему
Maven
7
Кстати, überи overявляются результатом систематического вокального сдвига в старом германском , который также можно наблюдать в этих парах слов: geben/give, leben/live, haben/have, heben/heaveи многие другие.
biziclop
Очень умное описание: Пример ссылки
Вениамин
Учитывая, сколько горя я получил от попыток обучать людей, я решил просто убрать то, на что некоторые продолжают жаловаться. Я все еще определяю uber в контексте немецкого языка, но (несколько многословный) урок истории уже пропал :-)
paxdiablo
59

банку убар также называют толстой банкой, то есть банкой с зависимостями.
Существует три распространенных метода создания Uber JAR:

  1. Unshaded: распакуйте все файлы JAR, затем упакуйте их в один JAR. Работает с загрузчиком классов Java по умолчанию. Инструменты maven-Assembly-плагин
  2. Затенение: то же самое, что и затенение, но переименование (т. Е. « Затенение ») всех пакетов всех зависимостей. Работает с загрузчиком классов Java по умолчанию. Предотвращает некоторые (не все) конфликты версий зависимостей. Инструменты Maven-Shade-плагин
  3. JAR-файлы JAR: окончательный JAR-файл содержит другие JAR-файлы, встроенные в него. Предотвращает конфликты версий зависимостей. Все файлы ресурсов сохраняются. Инструменты: Eclipse JAR File Exporter

для большего

Premraj
источник
57

Определение Паксдиабло действительно хорошо.

Кроме того, пожалуйста, рассмотрите возможность предоставления uber-jar иногда довольно интересно, если вы действительно хотите распространять программное обеспечение и не хотите, чтобы клиент самостоятельно загружал зависимости. В качестве отступления, если их собственная политика не разрешает использование некоторой библиотеки или если им приходится связывать некоторые дополнительные компоненты (slf4j, системные совместимые библиотеки, arch specialiez libs, ...), это, вероятно, увеличит трудности для них. ,

Вы можете выполнить это:

Более чистое решение состоит в том, чтобы отдельно предоставить библиотеку; maven-shade-plugin имеет предварительно настроенный дескриптор для этого. Это не сложнее сделать (с maven и его плагином).

Наконец, действительно хорошим решением является использование OSGI Bundle. Есть много хороших уроков по этому вопросу :)

Для дальнейшей настройки, пожалуйста, прочитайте эти темы:

Жан-Реми Реви
источник
4

Автономный исполняемый архив Java. В случае с uberjars WildFly Swarm это отдельный файл .jar, содержащий ваше приложение, части WildFly, необходимые для его поддержки, внутренний репозиторий зависимостей Maven, а также оболочку для начальной загрузки всего этого. посмотри это

Rasheed
источник
0

Различные названия - это просто способы упаковки Java-приложений.

Skinny - содержит ТОЛЬКО биты, которые вы буквально вводите в редактор кода, и НИЧЕГО больше.

Тонкий - Содержит все вышеперечисленное, а также прямые зависимости приложения от вашего приложения (драйверы БД, служебные библиотеки и т. Д.).

Пустота - обратная сторона тонких - Содержит только биты, необходимые для запуска вашего приложения, но НЕ содержит самого приложения. По сути, это предварительно упакованный «сервер приложений», на котором вы можете позднее развернуть свое приложение в том же стиле, что и традиционные серверы приложений Java EE, но с существенными отличиями.

Fat / Uber - содержит бит, который вы буквально пишете себе, плюс прямые зависимости вашего приложения, плюс биты, необходимые для запуска вашего приложения «самостоятельно».

Источник: статья из Dzone

Визуальное представление типов JAR

Перепечатано с: https://stackoverflow.com/a/57592130/9470346

Марк Хан
источник
0

Согласно подходам документации Uber-JAR: Существует три распространенных метода построения Uber-JAR:

Unshaded Распакуйте все файлы JAR, затем упакуйте их в один JAR. Инструменты: плагин Maven Assembly, Classworlds Uberjar

Затененный То же, что и не затененный , но переименование (т. Е. « Затенение ») всех пакетов всех зависимостей. Инструменты: плагин Maven Shade

JAR-файлы JAR В последнем JAR-файле содержатся другие JAR-файлы, встроенные в него. Инструменты: Eclipse JAR File Exporter, One-JAR.

Джамал Уддин
источник