Что такое uber jar?

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

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

Ответ 1

Über - немецкое слово для above или over, как в строке из предыдущего государственного гимна: Deutschland, Deutschland, über alles (Германия, Германия, прежде всего).

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

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

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

Ответ 2

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

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

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

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

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

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

Ответ 3

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

  • Unshaded: Распакуйте все файлы JAR, а затем перетащите их в один JAR. Работает с загрузчиком классов Java по умолчанию. Инструменты maven-assembly-plugin
  • Затенение: То же, что и незашифрованное, но переименуйте (т.е. "оттенок" ) все пакеты всех зависимостей. Работает с загрузчиком классов Java по умолчанию. Избегает некоторых (не всех) конфликтов версий зависимостей. Инструменты maven-shade-plugin
  • JAR из JARs: В последнем JAR файле содержатся другие файлы JAR, встроенные внутри. Устраняет конфликты версий зависимостей. Все файлы ресурсов сохранены. Инструменты: Eclipse JAR File Exporter

для более

Ответ 4

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

Ответ 5

из документации Gradle

В пространстве Java приложения и их зависимости обычно упаковывались как отдельные JAR файлы в одном архиве распространения. Это все еще происходит, но есть и другой распространенный подход: размещение классов и ресурсов зависимостей непосредственно в JAR приложения, создание так называемого UAR или жирного JAR.

Вот демонстрация задачи uberJar в файле build.gradle:

task uberJar(type: Jar) {
    archiveClassifier = 'uber'

    from sourceSets.main.output

    dependsOn configurations.runtimeClasspath
    from {
        configurations.runtimeClasspath.findAll { it.name.endsWith('jar') }.collect { zipTree(it) }
    }
}

В этом случае мы брали зависимости времени выполнения проекта - configurations.runtimeClasspath.files - и упаковывали каждый из файлов JAR методом zipTree(). В результате получается коллекция файлов ZIP файлов, содержимое которых копируется в UAR JAR вместе с классами приложения.