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>
#!/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