¿Qué es un uber jar?


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

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

 175
Author: JoseK, 2012-08-14

4 answers

Über es la palabra alemana para above o over, como en una línea de un himno nacional anterior: Deutschland, Deutschland, über alles (Alemania, Alemania por encima de todo).

Por lo tanto, en este contexto, un uber-jar es un "over-jar", un nivel por encima de un simple "jar", definido como uno que contiene tanto 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á del normal".

La ventaja es que puede distribuir su uber-jar y no le importa en absoluto 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 están también dentro de ese uber-jar. Al igual que todas las dependencias de esas dependencias. Y así sucesivamente.

 264
Author: paxdiablo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-12-06 01:28:04

La definición de Paxdiablo es realmente buena.

Además, por favor considere entregar un uber-jar a veces es bastante interesante, si realmente desea distribuir un software y no desea que el cliente tenga que descargar dependencias por sí mismo. Como un retroceso, si su propia política no permite el uso de alguna biblioteca, o si tienen que vincular algunos componentes adicionales (slf4j, system compliant libs, arch specialiez libs,...) esto probablemente aumentará las dificultades para ellos.

Usted puede realizar que :

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

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

Para más configuración, por favor lea estos temas :

 52
Author: Jean-Rémy Revy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:26:06

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

  1. Sin sombrear: Desempaquetar todos los archivos JAR, luego reempaquetarlos en un solo JAR. Funciona con el cargador de clases predeterminado de Java. Herramientas maven-assembly-plugin
  2. Sombreado:Igual que sin sombrear, pero renombrar (es decir, "sombrear") todos los paquetes de todas las dependencias. Funciona con la clase predeterminada de Java cargador. Evita algunos (no todos) choques de versiones de dependencias. Herramientas maven-shade-plugin
  3. JAR of JARs: El archivo JAR final contiene los otros archivos JAR incrustados dentro. Evita conflictos de versiones de dependencias. Se conservan todos los archivos fuente. Herramientas: Eclipse JAR File Exporter

Para más

 28
Author: Premraj,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-08-30 03:35:09

Un archivo Java autónomo y ejecutable. En el caso de uberjars enjambre de moscas silvestres, es un solo .archivo jar que contiene su aplicación, las partes de WildFly necesarias para soportarla, un repositorio interno Maven de dependencias, además de un shim para arrancar todo. ver esto

 1
Author: Rasheed,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-03 12:46:31