Estou lendo a documentação do Maven e me deparei com o nome 'uber-jar'.
O que significa um uber-jar e quais são suas características / vantagens?
Estou lendo a documentação do Maven e me deparei com o nome 'uber-jar'.
O que significa um uber-jar e quais são suas características / vantagens?
Respostas:
Über
é a palavra alemã para above
or over
(na verdade é cognato do inglês over
).
Portanto, nesse contexto, um uber-jar é um "over-jar", um nível acima de um JAR simples (a) , definido como aquele que contém seu pacote e todas as suas dependências em um único arquivo JAR. Pode-se pensar que o nome vem do mesmo estábulo que ultrageek, super-homem, hiperespaço e metadados, todos com significados semelhantes "além do normal".
A vantagem é que você pode distribuir seu uber-jar e não se importa se as dependências estão instaladas ou não no destino, pois o uber-jar realmente não tem dependências.
Todas as dependências de suas próprias coisas dentro do uber-jar também estão dentro desse uber-jar. Como são todas as dependências dessas dependências. E assim por diante.
(a) Eu provavelmente não deveria ter que explicar o que é um JAR para um desenvolvedor Java, mas vou incluí-lo por completo. É um arquivo Java, basicamente um único arquivo que normalmente contém vários arquivos de classe Java, juntamente com metadados e recursos associados.
über
e over
são o resultado de uma mudança vocal sistemática em Old germânica que também pode ser observada nestes pares de palavras: geben/give
, leben/live
, haben/have
, heben/heave
e muitos mais.
jar ubar também é conhecido como jar de gordura, ou seja, jar com dependências.
Existem três métodos comuns para construir um uber jar:
A definição de Paxdiablo é realmente boa.
Além disso, considere entregar um uber-jar às vezes bastante interessante, se você realmente deseja distribuir um software e não deseja que o cliente precise baixar dependências sozinho. Como uma desvantagem, se sua própria política não permitir o uso de alguma biblioteca, ou se eles tiverem que vincular alguns componentes extras (slf4j, bibliotecas compatíveis com o sistema, arch specialiez libs, ...), isso provavelmente aumentará as dificuldades para eles .
Você pode fazer isso:
Uma solução mais limpa é fornecer sua biblioteca separadamente; O maven-shade-plugin possui um descritor pré-configurado para isso. Isso não é mais complicado de fazer (com o maven e seu plugin).
Finalmente, uma solução realmente boa é usar um pacote OSGI. Há muitos bons tutoriais sobre isso :)
Para mais configurações, leia os seguintes tópicos:
Magro - Contém apenas os bits que você digita literalmente no seu editor de código e mais NADA.
Fino - Contém todas as acima, além das dependências diretas do aplicativo (drivers db, bibliotecas de utilidades, etc.).
Oco - O inverso de Fino - Contém apenas os bits necessários para executar seu aplicativo, mas NÃO contém o próprio aplicativo. Basicamente, um "servidor de aplicativos" pré-empacotado no qual você pode implantá-lo posteriormente, no mesmo estilo dos servidores de aplicativos Java EE tradicionais, mas com diferenças importantes.
Fat / Uber - Contém o bit em que você literalmente se escreve, além das dependências diretas do seu aplicativo, além dos bits necessários para executar o aplicativo "por conta própria".
Fonte: Artigo de Dzone
Publicado também em: https://stackoverflow.com/a/57592130/9470346