Что такое убер-банка?

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

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


person Ashay Batwal    schedule 14.08.2012    source источник
comment
Я также иногда видел, что это называется onejar или one-jar.   -  person Jeen Broekstra    schedule 06.12.2016


Ответы (7)


Über в переводе с немецкого означает above или over (на самом деле родственно английскому over).

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

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

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


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

person paxdiablo    schedule 14.08.2012
comment
Странно ... Я немец и, конечно, знаю слово über и его значение. Но почему он используется здесь в контексте Maven? В этом случае это означает, что одна или несколько вещей собраны вместе и доступны через сгенерированный jar. К сожалению, этот намек не решил мою проблему с maven ;-) - person Bjoern; 05.03.2015
comment
Кстати, über и over являются результатом систематического вокального сдвига в древнегерманском языке, который также можно наблюдать в этих парах слов: geben/give, leben/live, haben/have, heben/heave и многих других. - person biziclop; 26.06.2015
comment
Очень умное описание: пример ссылки - person Veniamin; 05.12.2016
comment
Учитывая, сколько горя я получил, пытаясь обучать людей, я решил просто удалить то, на что некоторые продолжают жаловаться. Я по-прежнему определяю uber в контексте немецкого языка, но (несколько многословный) урок истории уже пропал :-) - person paxdiablo; 20.02.2020
comment
Я: Читает урок истории. Я: открывает историю изменений, чтобы прочитать ее. :-) - person MC Emperor; 04.01.2021

ubar jar также известен как fat jar, т. е. jar с зависимостями.
Существует три распространенных метода создания uber jar:

  1. Незаштрихованные: распакуйте все файлы JAR, затем снова упакуйте их в один JAR. Работает с загрузчиком классов Java по умолчанию. Инструменты maven-assembly-plugin
  2. Затененный: то же самое, что и без затенения, но переименовать (т. е. «затенять») все пакеты всех зависимостей. Работает с загрузчиком классов Java по умолчанию. Избегает некоторых (не всех) конфликтов версий зависимостей. Инструменты maven-shade-plugin
  3. JAR of JAR: последний файл JAR содержит другие встроенные файлы JAR. Избегает конфликтов версий зависимостей. Все файлы ресурсов сохраняются. Инструменты: JAR-файл Eclipse Экспортер

подробнее

person Premraj    schedule 19.08.2016

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

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

Вы можете сделать это:

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

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

Для дальнейшей настройки ознакомьтесь с этими разделами:

person Jean-Rémy Revy    schedule 14.08.2012

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

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

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

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

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

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

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

Отправлено с: https://stackoverflow.com/a/57592130/9470346

person Mark Han    schedule 18.05.2020

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

person Rasheed    schedule 03.05.2017

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

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

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

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

person Md. Jamal Uddin    schedule 28.06.2020

Для разработчиков Java, использующих SpringBoot, ÜBER / FAT JAR обычно является конечным результатом package phase maven (или build task, если вы используете gradle).

Внутри Fat JAR можно найти каталог META-INF, внутри которого находится файл MANIFEST.MF со всей информацией, касающейся класса Main. Что еще более важно, на том же уровне каталога META-INF вы найдете каталог BOOT-INF, внутри которого находится каталог lib и содержит все .jar файлы, которые являются зависимостями вашего приложения.

person davide79    schedule 22.08.2020