Cos'è un super vaso?


Risposte:


357

Überè la parola tedesca per aboveo over(in realtà è in conoscenza con l'inglese over).

Quindi, in questo contesto, un uber-jar è un "over-jar", a un livello superiore da un semplice JAR (a) , definito come uno che contiene sia il pacchetto che tutte le sue dipendenze in un singolo file JAR. Si può pensare che il nome derivi dalla stessa stalla di ultrageek, superman, iperspazio e metadati, che hanno tutti significati simili di "oltre il normale".

Il vantaggio è che puoi distribuire il tuo uber-jar e non preoccuparti affatto se le dipendenze sono installate o meno nella destinazione, poiché il tuo uber-jar in realtà non ha dipendenze.

Tutte le dipendenze delle tue cose all'interno di Uber-Jar sono anch'esse all'interno di Uber-Jar. Come tutte le dipendenze di tali dipendenze. E così via.


(a) Probabilmente non avrei dovuto spiegare cosa sia un JAR a uno sviluppatore Java, ma lo includerò per completezza. È un archivio Java, fondamentalmente un singolo file che contiene in genere un numero di file di classe Java insieme a metadati e risorse associati.


Strano ... Sono un tedesco e ovviamente conosco la parola "über" e il significato. Ma perché viene usato qui nel contesto Maven? Questo caso significa che una o più cose sono raccolte insieme ed è accessibile tramite il vaso generato. Sfortunatamente questo suggerimento non ha sovrastato il mio problema maven ;-)
Bjoern

7
BTW, übere oversono il risultato di un cambiamento vocale sistematica in Old germanica che può anche essere osservata in queste coppie di parole: geben/give, leben/live, haben/have, heben/heavee molti altri.
biziclop,

Descrizione molto intelligente: link di
Veniamin

Dato quanto dolore ho provato a cercare di educare le persone, ho deciso di rimuovere solo le cose di cui alcuni continuano a lamentarsi. Definisco ancora superlativo nel contesto della lingua tedesca ma la lezione di storia (un po 'dettagliata) ora è andata :-)
paxdiablo

58

Il barattolo ubar è anche noto come barattolo grasso, cioè barattolo con dipendenze.
Esistono tre metodi comuni per costruire un vaso Uber:

  1. Non schermato: decomprimere tutti i file JAR, quindi reimballarli in un singolo JAR. Funziona con il caricatore di classi predefinito di Java. Strumenti maven-assembly-plugin
  2. Ombreggiato: identico a non ombreggiato, ma rinomina (ovvero "ombra") tutti i pacchetti di tutte le dipendenze. Funziona con il caricatore di classi predefinito di Java. Evita alcuni (non tutti) scontri di versione di dipendenza. Strumenti maven-shade-plugin
  3. JAR di JAR: il file JAR finale contiene gli altri file JAR incorporati. Evita gli scontri della versione di dipendenza. Tutti i file di risorse vengono conservati. Strumenti: Eclipse JAR File Exporter

per più


57

La definizione di Paxdiablo è davvero buona.

Inoltre, ti preghiamo di considerare che consegnare un Uber-Jar a volte è piuttosto interessante, se vuoi davvero distribuire un software e non vuoi che i clienti debbano scaricare le dipendenze da soli. Come svantaggio, se la propria politica non consente l'utilizzo di alcune librerie o se devono associare alcuni componenti extra (slf4j, librerie compatibili con il sistema, librerie arch specialiez, ...) ciò probabilmente aumenterà le difficoltà per loro .

Puoi farlo:

Una soluzione più pulita consiste nel fornire separatamente la libreria di tredici; maven-shade-plugin ha un descrittore preconfigurato per questo. Questo non è più complicato da fare (con Maven e il suo plugin).

Infine, un'ottima soluzione consiste nell'utilizzare un pacchetto OSGI. Ci sono molti buoni tutorial su questo :)

Per ulteriori configurazioni, leggi questi argomenti:


4

Un archivio Java eseguibile autonomo. Nel caso degli uberjars di WildFly Swarm, si tratta di un singolo file .jar contenente la tua applicazione, le parti di WildFly necessarie per supportarlo, un repository interno di dipendenze Maven, oltre a uno spessore per avviare tutto. guarda questo


0

I diversi nomi sono solo modi di impacchettare le app Java.

Skinny - Contiene SOLO i bit digitati letteralmente nel tuo editor di codice e NIENTE altro.

Sottile : contiene tutto quanto sopra PLUS le dipendenze dirette dell'app (driver db, librerie di utilità, ecc.).

Hollow : l'inverso di Thin: contiene solo i bit necessari per eseguire l'app ma NON contiene l'app stessa. Fondamentalmente un "server di app" preconfezionato sul quale è possibile distribuire successivamente l'app, nello stesso stile dei server di app Java EE tradizionali, ma con differenze importanti.

Fat / Uber - Contiene il bit che letteralmente ti scrivo PIÙ le dipendenze dirette della tua app PIÙ i bit necessari per far funzionare la tua app "da sola".

Fonte: articolo di Dzone

Rappresentazione visiva dei tipi di JAR

Ripubblicato da: https://stackoverflow.com/a/57592130/9470346

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.