¿Qué es un frasco súper?

251

Estoy leyendo la documentación de Maven y encontré el nombre 'uber-jar'.

¿Qué significa un uber-jar y cuáles son sus características / ventajas?

Ashay Batwal
fuente
14
Otro término para un "súper frasco" o "súper frasco" es "frasco gordo". Ver stackoverflow.com/questions/19150811/… .
erwaman
También lo he visto ocasionalmente llamado "onejar" o "one-jar".
Jeen Broekstra

Respuestas:

357

Überes la palabra alemana para aboveo over(en realidad está relacionada con el inglés over).

Por lo tanto, en este contexto, un uber-jar es un "over-jar", un nivel superior a un JAR (a) simple , definido como uno que contiene su paquete y todas sus dependencias en un solo archivo JAR. Se puede pensar que el nombre proviene del mismo establo que ultrageek, superman, hiperespacio y metadatos, que tienen significados similares de "más allá de lo normal".

La ventaja es que puede distribuir su uber-jar y no importarle si las dependencias están instaladas o no en el destino, ya que su uber-jar en realidad no tiene dependencias.

Todas las dependencias de tus propias cosas dentro del uber-jar también están dentro de ese uber-jar. Como son todas las dependencias de esas dependencias. Y así.


(a) Probablemente no debería tener que explicar qué es un JAR a un desarrollador de Java, pero lo incluiré para completarlo. Es un archivo Java, básicamente un archivo único que generalmente contiene varios archivos de clase Java junto con metadatos y recursos asociados.

paxdiablo
fuente
Extraño ... Soy alemán y, por supuesto, sé la palabra "über" y el significado. Pero, ¿por qué se usa aquí en el contexto de Maven? Este caso significa que una o más cosas están reunidas y es accesible a través del jar generado. Desafortunadamente, esta sugerencia no solucionó mi problema de maven ;-)
Bjoern
77
Por cierto, übery overson el resultado de un cambio sistemático en el Viejo vocal germánica que también se puede observar en estos pares de palabras: geben/give, leben/live, haben/have, heben/heavey muchos más.
biziclop
Descripción muy inteligente: Ejemplo de enlace
Veniamin,
Dado el dolor que he tenido por tratar de educar a las personas, he decidido eliminar las cosas de las que algunos siguen quejándose. Todavía defino uber en el contexto del idioma alemán, pero la lección de historia (algo detallada) ya no está :-)
paxdiablo
58

ubar jar también se conoce como fat jar, es decir, jar con dependencias.
Hay tres métodos comunes para construir un tarro uber:

  1. Sin sombrear: desempaquete todos los archivos JAR y luego vuelva a empaquetarlos en un solo JAR. Funciona con el cargador de clases predeterminado de Java. Herramientas maven-assembly-plugin
  2. Sombreado: igual que sin sombrear, pero renombra (es decir, "sombrea") todos los paquetes de todas las dependencias. Funciona con el cargador de clases predeterminado de Java. Evita algunos (no todos) conflictos de versiones de dependencia. Herramientas maven-shade-plugin
  3. JAR de JAR: el archivo JAR final contiene los otros archivos JAR integrados. Evita conflictos de versiones de dependencia. Todos los archivos de recursos se conservan. Herramientas: Eclipse JAR File Exporter

para más

Premraj
fuente
57

La definición de Paxdiablo es realmente buena.

Además, considere entregar un uber-jar a veces bastante interesante, si realmente desea distribuir un software y no desea que el cliente tenga que descargar las dependencias por sí mismo. Como inconveniente, si su propia política no permite el uso de alguna biblioteca, o si tienen que vincular algunos componentes adicionales (slf4j, bibliotecas compatibles con el sistema, bibliotecas arch specialiez, ...) esto probablemente les aumente las dificultades. .

Puedes realizar eso:

Una solución más limpia es proporcionar su biblioteca por separado; maven-shade-plugin tiene un descriptor preconfigurado para eso. Esto no es más complicado de hacer (con Maven y su complemento).

Finalmente, una solución realmente buena es usar un paquete OSGI. Hay muchos buenos tutoriales sobre eso :)

Para una configuración adicional, lea esos temas:

Jean-Rémy Revy
fuente
4

Un archivo Java ejecutable autónomo. En el caso de los uberjars de WildFly Swarm, es un único archivo .jar que contiene su aplicación, las porciones de WildFly necesarias para admitirlo, un repositorio interno de dependencias de Maven, más una cuña para arrancar todo. mira esto

Rasheed
fuente
0

Los diferentes nombres son solo formas de empaquetar aplicaciones java.

Skinny : contiene SOLO los bits que literalmente escribe en su editor de código, y NADA más.

Delgado : contiene todo lo anterior MÁS las dependencias directas de la aplicación de su aplicación (controladores db, bibliotecas de utilidades, etc.).

Hollow : el inverso de Thin: contiene solo los bits necesarios para ejecutar su aplicación, pero NO contiene la aplicación en sí. Básicamente, un "servidor de aplicaciones" preempaquetado en el que luego puede implementar su aplicación, en el mismo estilo que los servidores de aplicaciones Java EE tradicionales, pero con diferencias importantes.

Fat / Uber : contiene el bit en el que literalmente te escribes MÁS las dependencias directas de tu aplicación MÁS los bits necesarios para ejecutar tu aplicación "por sí misma".

Fuente: artículo de Dzone

Representación visual de los tipos JAR.

Publicado de nuevo: https://stackoverflow.com/a/57592130/9470346

Mark Han
fuente