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?
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?
Respuestas:
Über
es la palabra alemana para above
o 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.
über
y over
son 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/heave
y muchos más.
ubar jar también se conoce como fat jar, es decir, jar con dependencias.
Hay tres métodos comunes para construir un tarro uber:
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:
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
Publicado de nuevo: https://stackoverflow.com/a/57592130/9470346