Saltar a contenido

Maven-exec-plugin

1.¿Que es, para que sirve?

A veces en el proceso del ciclo de vida de nuestro proyecto, necesitamos hacer tareas externas, que por ejemplo tengamos definidas en un shell script y que esten incluidas en alguna determinada fase de maven.

Maven nos da la flexibilidad de poder integrar esas ejecuciones externas, pero dentro del ciclo de vida de nuestro proyecto con maven.

2.exec-maven-plugin

Para ello podemos ejecutar el plugin exec-maven-plugin que nos permite indicarle el script que queremos ejecutar y tambien en que phase de maven tiene que hacerlo.

En este ejemplo vemos que lanzará el script bootstrap.sh en la fase de initialize, es decir al comienzo de la ejecucion maven.

Maven Life Cycle

Las phases de maven las tienes en el sitio oficial https://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html

<build>
  <plugins>
    <plugin>
        <artifactId>exec-maven-plugin</artifactId>
        <groupId>org.codehaus.mojo</groupId>
        <version>1.6.0</version>
        <executions>
            <execution>
                <id>Download Necessary File before Build</id>
                <phase>initialize</phase>
                <goals>
                    <goal>exec</goal>
                </goals>
                <configuration>
                    <executable>${basedir}/bootstrap.sh</executable>
                </configuration>
            </execution>
        </executions>
    </plugin>   

Nuestro script ejecutable (chmod +x recuerdalo) de shell ya puede hacer lo que quiera, por ejemplo descargar un archivo (en este caso una imagen):

#!/bin/bash
echo "Executing previous Native Task Before Maven artifact Building";
echo "Downloading a necessary image"
wget https://upload.wikimedia.org/wikipedia/commons/thumb/a/a1/Oceanus-es.png/320px-Oceanus-es.png
echo "Succes Donwloaded image"

3.Ejecutar script al finalizar la ejecucion (INSTALL PHASE)

En este caso el script doSomeNativeTask.sh se ejecutara en la phase de install, donde nuestros test y nuestra compilacion ya se han ejecutado.

    <plugin>
        <artifactId>exec-maven-plugin</artifactId>
        <groupId>org.codehaus.mojo</groupId>
        <executions>
            <execution>
                <id>Do Some Native Task</id>
                <phase>install</phase>
                <goals>
                    <goal>exec</goal>
                </goals>
                <configuration>
                    <executable>${basedir}/doSomeNativeTask.sh</executable>
                </configuration>
            </execution>
        </executions>
    </plugin>
</plugins>
Por ejemplo este script, en este caso va a borrar el archivo que se ha descargado y se ha usado para la ejecucion maven
#!/bin/bash
echo "Starting doSomeNativeTask script";
#whoami;  # Printea el usuario actual
#printenv;  # Printea variables de entorno
rm ./320px-Oceanus-es.png   # Borrar el archivo que descargo bootstrap.sh
echo "End script";

4.DEMO

Codigo fuente de una demo sencilla funcionando https://github.com/deadveloper666/maven-exec-plugin-demo