¿Usar "maven-shade-plugin" para crear solo 1 jar ejecutable con todas las dependencias requeridas para su proyecto Java o Spring?

Publicado: 2016-11-16

maven-shade-plugin-cómo-crear-jar-ejecutable-basado-en-javaspring-con-todas-las-dependencias-requeridas

Simplemente cree un archivo Crunchify.jar con todas las dependencias dentro de él

La semana pasada escribí un tutorial sobre cómo usar maven-resources-plugin , maven-dependency-plugin y maven-jar-plugin para generar su Proyecto Jar ejecutable completo. Como resultado, crea o copia todos los archivos necesarios en la carpeta /target/Crunchify .

Before: usar los complementos maven-resource, maven-dependency, maven-jar:

maven-resources-maven-dependency-maven-jar-plugin-to-build-java-project

After: usando el complemento maven-shade:

crear-solo-1-jar-ejecutable-con-todas-las-dependencias-requeridas-propiedades-y-archivo-de-recursos-en-él-para-su-proyecto-java-o-spring

Comencemos sobre cómo lograr el resultado anterior:

Aquí, como puede ver, hemos incluido todo, desde Java Project en just one file y le hemos dado el nombre Crunchify.jar (con todos los archivos dentro).

Hace unos días, no tenía idea de cómo lograrlo, ya que quería crear una runnable binary distribution of a standalone Java application utilizando Maven. En otras palabras:

  1. ¿Cómo crear un archivo ejecutable basado en Spring con Maven?
  2. Creación de una distribución binaria ejecutable con Maven para Java + Spring + Otras dependencias
  3. ¿Cómo construir proyectos Java + Spring con Maven?

Normalmente en Maven, confiamos en la gestión de dependencias. Un artefacto solo contiene las clases/recursos de sí mismo. Maven será responsable de descubrir todos los artefactos (JAR, etc.) de los que depende el proyecto, al compilar y ejecutar, etc.

Con la ayuda del maven -shade- plugin pude lograr este objetivo . Proporciona la capacidad de empaquetar el artefacto en un uber-jar (One major file jar) , incluidas sus dependencias y sombrear, es decir, cambiar el nombre, los paquetes de algunas de las dependencias.

En mi proyecto, tengo muchas otras dependencias, es decir, Spring Framework, JSON, herramientas de terceros, etc. A continuación se muestra solo un proyecto de muestra, pero mi archivo .jar de producción resultó tener un tamaño de ~5.2MB big .

Un uber-jar es algo que toma todas las dependencias, extrae el contenido de las dependencias y lo coloca en un JAR, con las clases/recursos del proyecto en sí. Al tener tal uber-jar, es easy for execution , porque solo necesitará un JAR grande en lugar de toneladas de JAR pequeños para ejecutar su aplicación. También facilita la distribución en algunos casos.

Para lograr esto, debe actualizar su archivo pom.xml.

Paso 1

Eche un vistazo al archivo pom.xml completo. Principalmente, le interesaría la etiqueta <build> .

Como puede ver aquí, estoy usando Resource Transformers en el archivo pom.xml. Agregar classes/resources de varios artefactos en un Crunchify JAR es sencillo siempre que no haya superposición. De lo contrario, se requiere algún tipo de lógica para fusionar recursos de varios JAR. Aquí es donde entran en juego los transformadores de recursos.

Paso 2

Una vez que agregue maven-shade-plugin a su archivo pom.xml , simplemente use el siguiente comando para construir su proyecto.

Y debería ver un Crunchify.jar (uber-jar) creado con all dependencies mentioned in pom.xml file dentro.

Paso 3

Vaya a la carpeta de destino de su proyecto y verá el archivo Crunchify.jar creado. Solo usa el comando

$bash> java -jar Crunchify.jar para ejecutar su proyecto.

¿Tienes algo que añadir? Agréguelo a la sección de comentarios a continuación. Disfrute, tenga un gran día por delante y feliz codificación.