Plugins de Maven más comunes en Español


En este post se explicará de forma simple los plugins más comunes en Maven.

Apache maven compiler plugin

El compiler plugin de apache es utilizado para compilar el código fuente del proyecto.

¿Por qué es importante?

  • La configuración default del código fuente es 1.5, de tal modo que si tu aplicación utiliza cualquier novedad de java 1.6 o superior el código fuente no compilará.
  • No importa si en las variable de entorno del equipo se utiliza java 1.8, si el maven compiler plugin no está definido, Maven utilizará java 1.5 para compilarlo.
  • Puedes utilizarlo para forzar a tu proyecto a utilizar una versión de Java a la que se tiene configurada en el equipo.

¿Qué errores puede producir?

multi-catch statement is not supported in -source 1.5 [ERROR] (use -source 7 or higher to enable multi-catch statement)
diamond operator is not supported in -source 1.5 (use -source 7 or higher to enable diamond operator)

¿Cómo utilizarlo?

<project>
  [...]
  <build>
    [...]
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.5.1</version>
        <configuration>
          <source>1.8</source>
          <target>1.8</target>
        </configuration>
      </plugin>
    </plugins>
    [...]
  </build>
  [...]
</project>

Maven Jar plugin

El plugin provee la capacidad de construir Jars.

¿Por qué es importante?

  • Permite personalizar el archivo Manifest de la aplicación que se está generando
  • Permite incluir o excluir contenido del jar que se está generando
  • Permite hacer un Jar ejecutable, para esto se debe especificar la clase principal de la aplicación.

¿Qué errores puede producir?

no hay ningún atributo de manifiesto principal en application-1.jar

¿Cómo utilizarlo?

<plugin>
	<groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-jar-plugin</artifactId>
	<configuration>
		<archive>
			<manifest>
				<addClasspath>true</addClasspath>
				<mainClass>com.raidentrance.MainClass</mainClass>
			</manifest>
		</archive>
	</configuration>
</plugin>

Maven assembly plugin

El assembly plugin fue creado para permitir a los usuarios crear un un jar con sus dependencias, módulos, documentación y otros archivos.

¿Por qué es importante?

  • Si se desea ejecutar un jar, se debe recordar que este requiere de todas sus dependencias.

¿Qué errores puede producir?

java.lang.NoClassDefFoundError

¿Cómo utilizarlo?

<plugin>
	<artifactId>maven-assembly-plugin</artifactId>
	<configuration>
		<descriptorRefs>
			<descriptorRef>jar-with-dependencies</descriptorRef>
		</descriptorRefs>
		<archive>
			<manifest>
				<mainClass>com.raidentrance.MainClass</mainClass>
			</manifest>
		</archive>
	</configuration>
	<executions>
		<execution>
			<id>make-assembly</id>
			<phase>package</phase>
			<goals>
				<goal>single</goal>
			</goals>
		</execution>
	</executions>
</plugin>

Nota: en este plugin se puede definir de igual forma la clase principal que ejecutará la aplicación

Apache Maven dependency plugin

El dependency plugin provee la capacidad de manipular artefactos. Este puede ayudar a copiar y desempaquetar artifacts de repositorios locales y remotos a un lugar específico.

¿Por qué es importante?

  • Analiza las dependencias del proyecto y determinar cuales son : utilizadas y declaradas, utilizadas y no declaradas, no usadas y declaradas.

Ejemplo

<plugin>
	<groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-dependency-plugin</artifactId>
	<executions>
		<execution>
			<id>analyze</id>
			<goals>
				<goal>analyze-only</goal>
			</goals>
			<configuration>
				<failOnWarning>true</failOnWarning>
			</configuration>
		</execution>
	</executions>
</plugin>

Salida de ejemplo:

[WARNING] Unused declared dependencies found:
[WARNING]    org.slf4j:slf4j-log4j12:jar:1.7.21:compile
[WARNING]    org.springframework:spring-beans:jar:4.0.3.RELEASE:compile
  • Copia las dependencias a un directorio diferente, un uso común es mover algunas dependencias a un directorio lib.

Ejemplo

<plugin>
	<artifactId>maven-dependency-plugin</artifactId>
	<executions>
		<execution>
			<phase>install</phase>
			<goals>
				<goal>copy-dependencies</goal>
			</goals>
			<configuration>
				<outputDirectory>${project.build.directory}/lib</outputDirectory>
			</configuration>
		</execution>
	</executions>
</plugin>
  • Descomprime el proyecto en un directorio específico a demás de incluir o excluir archivos.

Ejemplo

<plugin>
	<groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-dependency-plugin</artifactId>
	<executions>
		<execution>
			<id>unpack-dependencies</id>
			<phase>package</phase>
			<goals>
				<goal>unpack-dependencies</goal>
			</goals>
			<configuration>
				<includes>**/*.class</includes>
				<excludes>**/*.properties</excludes>
				<outputDirectory>${project.build.directory}/alternateLocation</outputDirectory>
				<overWriteReleases>false</overWriteReleases>
				<overWriteSnapshots>true</overWriteSnapshots>
			</configuration>
		</execution>
	</executions>
</plugin>

Jetty plugin

El plugin de jetty es muy utilizado para un rápido desarrollo y pruebas durante el desarrollo de aplicaciones web que requieren un contenedor web.

¿Por qué es importante?

  • Es posible iniciar el contenedor de jetty utilizando un goal de maven mvn jetty:run.
  • Es posible desplegar los cambios realizados en el código sin la necesidad de reiniciar el contenedor.
  • Incrementa la productividad del equipo al realizar los hot deploys.

Ejemplo

<plugin>
	<groupId>org.eclipse.jetty</groupId>
	<artifactId>jetty-maven-plugin</artifactId>
	<version>9.2.11.v20150529</version>
</plugin>

Una vez colocado este plugin en la aplicación ejecutar el goal mvn jetty:run. Con esto se ejecutará el contenedor en el puerto 8080 utilizando el contexto ROOT.

Agregando un context path, intervalo de verificación y puerto.

<plugin>
	<groupId>org.eclipse.jetty</groupId>
	<artifactId>jetty-maven-plugin</artifactId>
	<configuration>
		<scanIntervalSeconds>10</scanIntervalSeconds>
		<webApp>
			<contextPath>/raidentrance</contextPath>
		</webApp>
		<httpConnector>
			<port>9999</port>
		</httpConnector>
	</configuration>
</plugin>

Una vez que se ejecute la aplicación el contenedor se desplegará en http://localhost:9999/raidentrance

Jacoco maven plugin

Este plugin es utilizado para generar el code coverage del proyecto.

¿Por qué es importante?

  • Permite conocer la cantidad de código cubierto por pruebas unitarias.
  • Permite conocer las condiciones evaluadas con test unitarios en pruebas unitarias.

Ejemplo

<plugin>
	<groupId>org.jacoco</groupId>
	<artifactId>jacoco-maven-plugin</artifactId>
	<configuration>
		<append>true</append>
	</configuration>
	<executions>
		<execution>
			<goals>
				<goal>prepare-agent</goal>
			</goals>
		</execution>
		<execution>
			<id>post-unit-test</id>
			<phase>test</phase>
			<goals>
				<goal>report</goal>
			</goals>
		</execution>
	</executions>
</plugin>

Para generar los reportes ejecutar el goal de maven mvn site.

Los libros recomendados para este tema son:

Autor: Alejandro Agapito Bautista

Twitter: @raidentrance

Contacto:raidentrance@gmail.com

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s