Advertising:

Crear un Jar autocontenido con spring boot y maven

From ChuWiki
Jump to navigation Jump to search

Cuando tenemos una aplicación con Spring Boot, podemos generar un tocho-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 ni-tocho.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[edit]

Utilizando es sencillo. Basta añadir este plugin en nuestro fichero pom.xml y configurarlo

<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.RestMain</mainClass>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            ...
        </plugins>
    </build>
</project>

Simplemente, en la sección build, hemos añadido el plugin spring-boot-maven-plugin. Indicamos que ejecute el goal repackage en la fase de package. Es decir, si ejecutamos nuestro habitual mvn package, se ejecutará también el goal repackage. Esto cambiará el fichero jar de nuestro aplicación generado en el directorio taget añadiéndole la coletilla original y generando de nuevo el jar, pero con todo contenido ya dentro de él.

Un ejemplo[edit]

En rest-java-application tienes un ejemplo completo. No es más que una aplicación java con spring boot que levanta un servidor con web services REST.

Si te fijas en el pom.xml verás, aparte de las dependencias el plugin que acabamos de mencionar. Compilando con mvn package y yendo al directorio target, veremos los dos ficheros jar

30/01/2021  22:12    <DIR>          classes
30/01/2021  22:12    <DIR>          generated-sources
30/01/2021  22:12    <DIR>          maven-archiver
30/01/2021  22:12    <DIR>          maven-status
30/01/2021  22:12        37.731.928 rest-java-application-1.0-SNAPSHOT.jar
30/01/2021  22:12             5.360 rest-java-application-1.0-SNAPSHOT.jar.original

El terminado en original es el jar de nuestra aplicación, tal cual lo generaría maven de una forma normal. El que no lleva original es el jar que podemos arrancar con

java -jar rest-java-application-1.0-SNAPSHOT.jar

Vemos que es muchísimo más grande que el otro. El motivo se intuye fácilmente, lleva dentro todos los jar de los que depende nuestra aplicación, que siendo spring-boot, no son precisamente pocos.