Configuración de plugins

De Wiki de EGC
Revisión del 11:56 24 nov 2017 de Resinas (discusión | contribuciones) (Página creada con «La configuración de plugins en Maven se realiza siempre a través del fichero pom.xml. En general, la configuración de plugins me va a servir para dos cosas: * Adaptar el...»)
(dif) ← Revisión anterior | Revisión actual (dif) | Revisión siguiente → (dif)
Saltar a: navegación, buscar

La configuración de plugins en Maven se realiza siempre a través del fichero pom.xml. En general, la configuración de plugins me va a servir para dos cosas:

  • Adaptar el funcionamiento de un plugin a la forma que me interese en el proyecto.
  • Vincular objetivos de un plugin a fases del ciclo de vida de maven.

A continuación vamos a ver tres ejemplos de cosas que se pueden conseguir por medio de la configuración de plugins.

Seleccionar la versión de Java para compilación y ejecución con maven-compiler-plugin

Por defecto, el plugin de compilación de maven fija tanto la versión del código (source) como la versión del .class generado (target) con la versión 1.5 de Java. Si queremos cambiarlo, es necesario configurar el plugin que se encarga de compilar el código (maven-compiler-plugin).

Añadir el siguiente código al método main de la clase App

List<String> myList =
    Arrays.asList("a1", "a2", "b1", "c2", "c1");

myList
    .stream()
    .filter(s -> s.startsWith("c"))
    .map(String::toUpperCase)
    .sorted()
    .forEach(System.out::println);

Este código utiliza la funcionalidad de Streams de Java 1.8.

Compilar el código modificado

Observar el mensaje de error. ¿Por qué falla?

Configurar pom.xml para que maven-compiler-plugin use la versión 1.8 de java

<project>
  [...]
  <build>
    [...]
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.7.0</version>
        <configuration>
          <source>1.8&lt;/source&gt;
          <target>1.8</target>
        </configuration>
      </plugin>
    </plugins>
    [...]
  </build>
  [...]
</project>


Modificar el manifest con maven-jar-plugin. Establecer el punto de entrada del .jar generado (cf. Jar Plugin)

Moficar el pom.xml

Añadir lo siguiente:

<build>
	<plugins>
  		<!-- Make this jar executable -->
		<plugin>
			<groupId>org.apache.maven.plugins</groupId>
			<artifactId>maven-jar-plugin</artifactId>
			<version>2.6</version>
			<configuration>
<!--Pluging configuration -->
			 <archive>
				<manifest>
					<!-- Jar file entry point -->
					<mainClass>${project.groupId}.App</mainClass>
				</manifest>
			  </archive>
			</configuration>
		</plugin>
	</plugins>
  </build>

Se ha configurado el pluging jar que está asociada a la fase package. Al evaluar el objetivo jar:jar o la fase package, creará el .jar con la configuración anterior.

Cree el .jar

mvn clean package

ó

mvn clean jar:jar

¿Qué diferencias hay?

Ejecute el .jar generado

java -jar target\....jar

¿Por qué falla?


Copiar las dependencias con maven-dependecy-pluging. Se establecerá una carpeta dentro de target donde estarán todos los jars dependientes (cf. Dependency Plugin)

Edite el pom.xml

Añada el siguiente código

...
<plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-dependency-plugin</artifactId>
        <version>2.10</version>
        <executions>
          <execution>
            <id>copy-dependencies</id>
            <phase>package</phase>
            <goals>
              <goal>copy-dependencies</goal>
            </goals>
            <configuration>
              <outputDirectory>${project.build.directory}/dependencias</outputDirectory>
              <includeScope> runtime </includeScope> 
            </configuration>
          </execution>
        </executions>
      </plugin>
...

Se ha configurado el plugin dependency. El objetivo copy-dependencies se ha asociado a la fase package y se ha configurado para que las dependencias de runtime se copien en la carpeta dependencias.

Cree el .jar y ejecute

mvn package
java -jar ruta_al.jar

¿Sigue fallando?

Hay que terminar de configurar el pluging Jar

Hay que añadir las referencias en el manifest. Añada las siguientes líneas de configuración del plugin Jar anterior.

...
<addClasspath>true</addClasspath>
<classpathPrefix> dependencias/</classpathPrefix>
...

¿Vas rápido? -> Tarea adicional

  • El plugin Jar se ha configurado para que, durante su ejecución dentro del ciclo de vida default, se comporte de cierta manera.
  • Sin embargo, el plugin Depencies, que no se ejecuta normalmente, se ha configurado para que sí se ejecute.
  • Haga, ahora, que se creen 2 jars, uno con la configuración que hemos indicado arriba y otro sin que tenga ninguna configuración por nuestra parte.
  • Además de tocar el atributo manifest tendrá que tocar el finalName para que cada jar tenga un nombre diferente (cf. Jar Parameters).