Я читаю документацию Maven и наткнулся на имя "uber-jar".
Что означает uber-jar и каковы его особенности/преимущества?
Я читаю документацию Maven и наткнулся на имя "uber-jar".
Что означает uber-jar и каковы его особенности/преимущества?
Über
- немецкое слово для above
или over
, как в строке из предыдущего государственного гимна: Deutschland, Deutschland, über alles
(Германия, Германия, прежде всего).
Следовательно, в этом контексте uber-jar является "чрезмерным", на один уровень от простого "jar", который определяется как один, который содержит как ваш пакет, так и все его зависимости в одном JAR файле. Считается, что имя происходит от той же стабильной, что и ультрагелек, сверхчеловек, гиперпространство и метаданные, которые имеют сходные значения "вне нормального".
Преимущество заключается в том, что вы можете распространять свой uber-jar и вообще не заботиться о том, установлены ли зависимости в месте назначения, поскольку ваш uber-jar фактически не имеет зависимостей.
Все зависимости ваших собственных вещей внутри uber-jar также находятся в пределах uber-jar. Как и все зависимости этих зависимостей. И так далее.
Определение Паксдиабло действительно хорошо.
Кроме того, пожалуйста, рассмотрите возможность предоставления uber-jar иногда довольно интересно, если вы действительно хотите распространять программное обеспечение и не хотите, чтобы клиент самостоятельно загружал зависимости. В качестве отступления, если их собственная политика не разрешает использование некоторой библиотеки или если им приходится связывать некоторые дополнительные компоненты (slf4j, системные совместимые библиотеки, arch specialiez libs,...), это, вероятно, увеличит трудности для них..
Вы можете выполнить это:
Более чистое решение состоит в том, чтобы отдельно предоставить библиотеку; maven-shade-plugin имеет предварительно настроенный дескриптор для этого. Это не сложнее сделать (с maven и его плагином).
Наконец, действительно хорошим решением является использование OSGI Bundle. Есть много хороших уроков по этому вопросу :)
Для дальнейшей настройки, пожалуйста, прочитайте эти темы:
ubar jar также известен как жирная банка, т.е. банка с зависимостями.
Существует три распространенных метода построения uber jar:
Автономный исполняемый Java-архив. В случае с WildFly Swarm uberjars это один файл .jar, содержащий ваше приложение, части WildFly, необходимые для его поддержки, внутренний репозиторий зависимостей Maven, а также прокладка для загрузки всего. см. это
В пространстве 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 вместе с классами приложения.