shade plugin example dependency compiler java apache maven plugins jar

java - plugin - Diferencia entre los complementos de Maven(ensamblados, complementos de archivos, complementos sombreados)



maven-jar-plugin include dependencies (3)

Soy un principiante en maven y ahora estoy confundido con la diferencia entre estos complementos de maven. ¿Todos estos crean archivos jar? ahora mis preguntas son

  1. ¿Cuál es la diferencia entre el archivo jar creado en cada plugin? (plugin de montaje, jar-plugin, plugin sombreado)

  2. El propósito de cada plugin. (montaje, plugin jar, plugin sombreado)

  3. Sé que incluso sin especificar ninguno de estos complementos, una vez que escriba el paquete mvn, habrá un resultado jar. ¿Cuál es la diferencia del contenedor de salida sin estos complementos y el de salida con estos complementos? TIA


  1. maven-jar-plugin : este plugin proporciona la capacidad de crear y firmar maven-jar-plugin . Pero solo compila los archivos java bajo src / main / java y / src / main / resources /. No incluye los archivos JAR dependencias.
  2. maven-assembly-plugin : este plugin extrae todos los archivos jar de dependencia en clases en bruto, y los agrupa. También se puede usar para construir un jar ejecutable especificando la clase principal. Funciona en proyectos con menos dependencias solamente, para proyectos grandes con muchas dependencias, causará un problema de conflicto de nombre de clase Java.
  3. maven-shade-plugin : empaqueta todas las dependencias en un uber-jar. También se puede usar para construir un jar ejecutable especificando la clase principal. Este complemento es particularmente útil ya que combina el contenido de archivos específicos en lugar de sobrescribirlos mediante Clases de ubicación . Esto es necesario cuando hay archivos de recursos que tienen el mismo nombre en todos los archivos y el complemento intenta empaquetar todos los archivos de recursos.

Consulte: comparación: jarrón de plugin de maven, montaje, sombra


El complemento jar de Maven simplemente crea un archivo jar con todos los archivos SOURCE [archivos de clase compilados a partir de archivos .java] empaquetados, pero el archivo jar no se puede implementar ya que hay muchas más dependencias, como archivos jar de terceros u otros archivos jar de biblioteca que son Necesario para ejecutar el archivo jar SOURCE. Aquí, en donde el complemento de ensamblaje de Maven entra en escena, crea un paquete de una extensión de su elección como .zip, .tar, .gz, que es un paquete completamente implementable con todas las dependencias incluidas. También puede especificar la estructura de directorios en el complemento de ensamblaje que se debe crear cuando el paquete se implementa en el servicio


Jar plugin

Veamos lo que puede decir el siguiente comando.

mvn help:describe -Dplugin=org.apache.maven.plugins:maven-jar-plugin

Tiene 3 objetivos, help , jar y test-jar . Creo que lo que más te interesa es el objetivo del jar , que según la descripción hace lo siguiente:

Construye un JAR desde el proyecto actual.

Como nota al margen, la ejecución de mvn help:effective-pom en un proyecto con el empaquetado configurado como jar , muestra que este complemento se configura automáticamente y se ejecuta durante la fase del package .

<plugin> <artifactId>maven-jar-plugin</artifactId> <version>2.4</version> <executions> <execution> <id>default-jar</id> <phase>package</phase> <goals> <goal>jar</goal> </goals> </execution> </executions> </plugin>

Plugin de montaje

Este tiene un propósito diferente. Tiene 8 goles, pero 6 de ellos están en desuso. Entonces, aparte del objetivo de help , esto nos deja con el single objetivo.

mvn help:describe -Dplugin=org.apache.maven.plugins:maven-assembly-plugin

Ensamble un paquete de aplicaciones o una distribución a partir de un descriptor de ensamblaje. Este objetivo es adecuado para vincularse con el ciclo de vida o llamar directamente desde la línea de comandos (siempre que todos los archivos necesarios estén disponibles antes de que comience la compilación, o se generen con otro objetivo especificado antes de este en la línea de comandos).

Puede usar el complemento de ensamblaje cuando desee entregar más que el artefacto de su proyecto (JAR, WAR, etc.), pero la configuración se incluye en otro archivo.

Complemento de sombra

La descripción del objetivo principal es un poco decepcionante.

mvn help:describe -Dplugin=org.apache.maven.plugins:maven-shade-plugin

Mojo que realiza el delegado de sombreado al componente Shader.

La mayoría de las veces desea usar este complemento si desea producir un uber-jar, que es su artefacto en un JAR con todas sus dependencias transitivas.

Básicamente, si está construyendo una biblioteca, mantendrá el complemento JAR predeterminado. Si está creando una aplicación, podría considerar el uso del complemento de sombra, aunque para mí es rápido y sucio. Si uber-jar no es de su agrado o la distribución no puede caber dentro de un solo JAR (configuración externa, dependencias nativas, etc.), entonces debe ir para el complemento de ensamblaje.