Também vi ocasionalmente chamado de "onejar" ou "one-jar".
Jeen Broekstra
Respostas:
357
Überé a palavra alemã para aboveor 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.
Estranho ... Eu sou alemão e, é claro, conheço a palavra "über" e o significado. Mas por que é usado aqui no contexto do Maven? Nesse caso, significa que uma ou mais coisas são reunidas e são acessíveis através do jar gerado. Unfortunateley essa dica não sovle meu problema maven ;-)
Bjoern
7
BTW, übere oversã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/heavee muitos mais.
Dada a quantidade de sofrimento que tive ao tentar educar as pessoas, decidi simplesmente remover as coisas que alguns reclamam. Eu ainda defino uber no contexto do idioma alemão, mas a lição de história (um tanto detalhada) agora se foi :-)
paxdiablo 20/02
58
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:
Sem sombra: Descompacte todos os arquivos JAR e, em seguida, reembale-os em um único JAR. Funciona com o carregador de classes padrão do Java. Ferramentas maven-assembly-plugin
Sombreado: O mesmo que não sombreado, mas renomeie (ou seja, "sombra") todos os pacotes de todas as dependências. Funciona com o carregador de classes padrão do Java. Evita alguns conflitos (não todos) na versão de dependência. Ferramentas maven-shade-plugin
JAR de JARs: O arquivo JAR final contém os outros arquivos JAR incorporados. Evita conflitos de versão de dependência. Todos os arquivos de recursos são preservados. Ferramentas: Exportador de Arquivos JAR do Eclipse
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 .
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:
Um arquivo Java executável independente. No caso dos uberjars do WildFly Swarm, é um único arquivo .jar contendo seu aplicativo, as partes do WildFly necessárias para suportá-lo, um repositório interno de dependências do Maven, além de um calço para inicializar tudo. Veja isso
Os nomes diferentes são apenas formas de empacotar aplicativos java.
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".
Respostas:
Über
é a palavra alemã paraabove
orover
(na verdade é cognato do inglêsover
).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.
fonte
über
eover
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:
para mais
fonte
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:
fonte
Um arquivo Java executável independente. No caso dos uberjars do WildFly Swarm, é um único arquivo .jar contendo seu aplicativo, as partes do WildFly necessárias para suportá-lo, um repositório interno de dependências do Maven, além de um calço para inicializar tudo. Veja isso
fonte
Os nomes diferentes são apenas formas de empacotar aplicativos java.
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
fonte