Fatjars con Maven

Un fatjar es básicamente un empaquetado de una aplicación Java que no solo contiene las clases que codificaste, si no también sus dependencias e incluso la plataforma sobre la que va a correr, por ejemplo, un servidor HTTP embebido, y todo en un único archivo Jar.

De este modo el archivo Jar es completamente independiente y puede correr en el formato “standalone”, es decir, sin necesidad de ser instalado en ningún servidor de aplicaciones como Tomcat, Weblogic, etc.

Como generar un fatjar con Maven

Para generar fatjars con Maven es suficiente con agregar un pequeño snippet al archivo pom.xml.

<build>
    <sourceDirectory>src</sourceDirectory>
    <plugins>
        <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <groupId>org.apache.maven.plugins</groupId>
            <version>latest</version>
            <executions>
                <execution>
                    <id>make-executable-jar-with-dependencies</id>
                    <phase>package</phase>
                    <goals>
                        <goal>single</goal>
                    </goals>
                    <configuration>
                        <archive>
                            <manifest>
                                <addClasspath>true</addClasspath>
                                <mainClass>com.myapp.Main</mainClass>
                            </manifest>
                        </archive>
                        <descriptorRefs>
                            <descriptorRef>jar-with-dependencies</descriptorRef>
                        </descriptorRefs>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

Lo que hace esto es agregar un plugin para el build de tu aplicación, define la clase principal y una vez estén generados todos los .class, los incluirá en un único Jar, incluyendo los .class que estén dentro de las librerías.

Super importante actualizar los siguientes datos:

  1. sourceDirectory donde se encuentran tus fuentes
  2. mainClass la entry class de tu aplicación

Ahora con solo ejecutar el siguiente comando tendrás un Jar único en el directorio target de tu proyecto:

mvn package

Si tienes muchas librerías importadas el proceso puede tardar un poco, ya que tomará los .class de cada una para incluirlas en el fatjar.

Solo basta con un comando para dejar tu aplicación corriendo:

java -cp fat.jar com.myapp.Main

Final notes

Vemos que manejar un fatjar resulta mucho más práctico, ya que puedes distribuir tu aplicación en un solo archivo y sin tener que preocuparte de mover dependencias de un lado a otro. Si a eso le sumamos un servidor embebido como Jetty, quitamos la necesidad de estar desplegando la aplicación en un servidor de aplicaciones.

1 Comment

Add yours →

  1. Hola, soy casi nuevo en Java y Maven. y algunos de tu post me han aclarado algunas dudas.
    solo quería decir: Muchas gracias!

Agregar un comentario

Su dirección de correo no se hará público.