Spring Boot Maven Plugin
Cuando tenemos un proyecto Maven con Spring Boot, podemos generar un jar (o war) que tenga dentro todas las dependencias que necesite, ficheros de configuración y recursos, de forma que se pueda arrancar con el comando simple java -jar mi.jar
, sin necesidad de configurar classpath o tener ficheros de dependencias junto a él. Un único fichero contiene todo lo necesario para hacerlo.
Veamos cómo
spring-boot-maven-plugin[editar]
Utilizando es sencillo. Basta añadir este plugin en nuestro fichero pom.xml.
<project>
...
<build>
...
<plugins>
<!-- Para convertir el jar en ejecutable con java -jar -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
...
</plugins>
</build>
</project>
Cuando generemos el jar con maven, con el comando "mvn package", este Plugin buscará automáticamente la clase "main" de nuestro proyecto Spring Boot y añadirá al fichero "jar" todo lo necesario para que se pueda ejecutar directamente.
Veremos que en el directorio "target", se crean dos "jar"
04/11/2023 13:09 9.721.178 maven-spring-boot-0.0.1-SNAPSHOT.jar 04/11/2023 13:09 3.000 maven-spring-boot-0.0.1-SNAPSHOT.jar.original
Vemos el "original", de pequeño tamaño y que es el que genera Maven por defecto. El plugin spring-boot-maven-plugin lo conserva añadiéndole el apellido ".original". El otro "jar", el de más tamaño, es el que genera el plugin y tiene dentro todas las dependencias y lo neceario para ser un ejecutable java autocontenido. Podemos arrancarlo con
java -jar maven-spring-boot-0.0.1-SNAPSHOT.jar
Varios main de Spring Boot en el proyecto[editar]
Si tenemos en el proyecto varios main, porque nos interese arrancar uno u otro, o los dos a la vez, spring-boot-maven-plugin necesita algo de configuración. En concreto, decirle cual es el main que tiene que arrancar. La configuración se pondría de la siguiente manera.
<project>
...
<build>
...
<plugins>
<!-- Para convertir el jar en ejecutable con java -jar -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<id>repackage</id>
<phase>package</phase>
<goals>
<goal>repackage</goal>
</goals>
<configuration>
<mainClass>com.chuidiang.examples.MiMainDeSpringBoot</mainClass>
</configuration>
</execution>
</executions>
</plugin>
...
</plugins>
</build>
</project>
Añadimos al plugin spring-boot-maven-plugin un apartado <executions>. Indicamos que ejecute el goal repackage, propio del plugin, en la fase de package. Es decir, si ejecutamos nuestro habitual mvn package
, se ejecutará también el goal repackage. Y en la parte de <configuration>, ponemos la clase con el main que queramos que sea la que arranque al ejecutra el jar.