Вопрос-ответ

What is an uber JAR file?

Что такое файл uber JAR?

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

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

Переведено автоматически
Ответ 1

Über это немецкое слово, обозначающее above or over (на самом деле оно родственно английскому over).

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

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

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


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

Ответ 2

Из imagej.net Описание Uber-JAR:


Файл uber JAR также известен как fat JAR, то есть JAR-файл с зависимостями.


Существует три распространенных метода создания файла uber JAR:



  1. Незаштрихованный: распакуйте все файлы JAR, а затем перепакуйте их в один файл JAR. Он работает с загрузчиком классов Java по умолчанию. Инструменты maven-сборка-плагин

  2. Заштрихованный: то же, что и незаштрихованный, но переименуйте (т.Е. "затените") все пакеты всех зависимостей. Это работает с загрузчиком классов Java по умолчанию. Это позволяет избежать некоторых (не всех) столкновений версий зависимостей. Инструменты maven-shade-плагин

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


Ответ 3

Определение Paxdiablo действительно хорошее.

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

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

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

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

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

Ответ 4

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

Skinny – Содержит только биты, которые вы буквально вводите в свой редактор кода, и ничего больше.

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

Hollow - обратная сторона thin. Он содержит только биты, необходимые для запуска вашего приложения, но не содержит само приложение. По сути, это предварительно упакованный "сервер приложений”, на котором вы можете позже развернуть свое приложение, в том же стиле, что и традиционные серверы приложений Java EE, но с важными отличиями.

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

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

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

Перепечатано с: Что такое fat JAR?

2023-04-02 03:01 java maven