Що таке банка uber?


251

Я читаю документацію Maven і натрапив на назву "uber-jar".

Що означає uber-jar та які його особливості / переваги?


14
Інший термін для "банку uber" або "super jar" - це "жирна банка". Дивіться stackoverflow.com/questions/19150811/… .
erwaman

Я також періодично бачив, що це називається "onejar" або "one-jar".
Jeen Broekstra

Відповіді:


357

Über- це німецьке слово для aboveабо over(воно фактично одночасно з англійським over).

Отже, у цьому контексті uber-jar - це «надмірна банка», на один рівень вище від простого JAR (a) , визначеного як такий, який містить і ваш пакет, і всі його залежності в одному файлі JAR. Можна вважати, що назва походить із тієї самої стабільної, як ультрагек, супермен, гіперпростір та метадані, які всі мають схоже значення "поза нормальним".

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

Усі залежності ваших власних речей в uber-jar також знаходяться в межах цього uber-jar. Як і всі залежності цих залежностей. І так далі.


(а) Я, мабуть, не повинен пояснювати, що таке JAR, розробнику Java, але я включу його для повноти. Це архів Java, в основному це один файл, який зазвичай містить ряд файлів класу Java разом із пов'язаними метаданими та ресурсами.


Дивно ... Я німець і, звичайно, знаю слово "über" і значення. Але чому він використовується тут у контексті Мейвена? Це означає, що одна або кілька речей збираються разом і є доступними через створену банку. На жаль цей натяк не вирішив мою проблему з Maven ;-)
Bjoern

7
До речі, überі overє результатом систематичного вокального зсуву в старому німецькому , який також можна спостерігати в цих парах слів: geben/give, leben/live, haben/have, heben/heaveі багато інших.
biziclop

Дуже розумний опис: Приклад посилання
Веніямін

З огляду на те, скільки страждань я намагаюся навчати людей, я вирішив просто прибрати речі, на які дехто продовжує скаржитися. Я все ще визначаю uber в контексті німецької мови, але (дещо багатослівний) урок історії зараз пропав :-)
paxdiablo

58

баночка убар також відома як жирова банка, тобто баночка із залежностями.
Існує три поширених способу побудови банку uber:

  1. Без затінення: Розпакуйте всі файли JAR, а потім перепакуйте їх в один JAR. Працює з завантажувачем класу Java за замовчуванням. Інструменти maven-Assembly-плагін
  2. Затінений : Те саме, що не заштриховано, але перейменуйте (тобто "відтінок") усіх пакетів усіх залежностей. Працює з завантажувачем класу Java за замовчуванням. Уникайте деяких (не всіх) сутичок версій залежності. Інструменти maven-shadow-плагін
  3. JAR JARs: Остаточний файл JAR містить інші вбудовані файли JAR. Уникає сутичок версій залежності. Усі файли ресурсів зберігаються. Інструменти: Експортер файлів JARlip Eclipse

для більш


57

Визначення Paxdiablo дійсно добре.

Крім того, будь ласка, подумайте, що доставка убер-баночки іноді буває досить цікавою, якщо ви дійсно хочете розповсюджувати програмне забезпечення і не хочете, щоб клієнт мав завантажувати залежності самостійно. На відміну, якщо їх власна політика не дозволяє використовувати деяку бібліотеку, або якщо їм доведеться зв’язувати деякі додаткові компоненти (slf4j, lib-сумісні системи, архіви спеціалізованих libs, ...), це, ймовірно, збільшить для них труднощі .

Ви можете виконати це:

Більш чітке рішення - забезпечити свою бібліотеку окремо; maven-shadow-плагін має заздалегідь налаштований дескриптор для цього. Це не складніше зробити (з maven та його плагіном).

Нарешті, дійсно вдалим рішенням є використання пакету OSGI. На цьому є багато хороших навчальних посібників :)

Для подальшої конфігурації, будь ласка, прочитайте ці теми:


4

Самостійний виконуваний архів Java. У випадку з WildFly Swarm uberjars - це єдиний .jar-файл, що містить вашу програму, частини WildFly, необхідні для його підтримки, внутрішнє сховище Maven залежностей, а також shim для завантаження всього цього. дивіться це


0

Різні назви - це лише способи упаковки програм Java.

Худий - містить ТОЛЬКІ біти, які ви буквально набираєте у своєму редакторі коду, і нічого іншого.

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

Порожня - обернена тонка - містить лише біти, необхідні для запуску програми, але НЕ містить самого додатка. В основному це попередньо упакований "сервер додатків", на який можна згодом розгорнути додаток, у тому ж стилі, що і традиційні сервери додатків Java EE, але з важливими відмінностями.

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

Джерело: Стаття від Dzone

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

Повідомлено з: https://stackoverflow.com/a/57592130/9470346

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.