[Métodos] Crear un ejecutable (.exe) a partir de nuestro .jar de java con Launch4J


Launch4j es una herramienta para envolver aplicaciones Java distribuidas como jars in ejecutables nativos de Windows (es posible tambien envolverlos para Linux y Mac OS X)

Permite personalizar el icono de la app, crear un splash screen nativo al sistema, embeber una jre o redirigir a la pagina de descarga de Java en caso que no se encuentre disponible.

Se puede realizar con la tarea con el ejecutable como comandos de linea de consola, como tarea ant y construir con un plugin en maven.

Creando un ejecutable

Para la elaboracion del ejecutable con Launch4j necesitaremos



Principal.java

public class Principal {
    public static void main(String[] args) {
        String titulo = "Saludos con Launch4j";
        String message = "Hola juli =)";
        int messageType = JOptionPane.INFORMATION_MESSAGE;
        JOptionPane.showMessageDialog(null, message, titulo, messageType);
    }
}

Se le agrega la definicion de la clase main al plugin que genera el jar ejecutable

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 <modelVersion>4.0.0</modelVersion>
 <groupId>com.github.dariozubaray</groupId>
 <artifactId>saludo-joptionpane</artifactId>
 <version>1.0.0-SNAPSHOT</version>
 <name>saludosJOptionPane</name>
 <description>simple saludo desde joptionpane</description>
 <build>
  <plugins>
   <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <configuration>
     <archive>
      <manifest>
       <mainClass>com.github.dariozubaray.Principal</mainClass>
      </manifest>
     </archive>
    </configuration>
   </plugin>
  </plugins>
 </build>
</project>

Cuando ejecutamos el goal mvn package, obtendremos nuestro jar ejecutable.




Una vez dentro de launch4j, en la solapa de basic debemos configurar

  • OutputFile: es el archivo de salida con la extension .exe
  • Jar: el jar que queremos envolver

Luego bajo JRE debemos especificar al menos la version minima de java

  • El esquema soportado por launch4j es el versionado tradicional que consta de 2 números mayor.menor(en inglés: major.minor) EJ: 1.5
  • También es válido el versionado de 3 números mayor.menor.micro, como la fase de desarrollo. EJ: 1.8.0
  • Se admite también la fase de construccion EJ: 1.7.0_51
  • A partir de java 9 es válido indicar solo el número de version. EJ: 10

Construir el envoltorio desde el icono de engranaje, lo que nos preguntará de guardar la configuración como xml

Y eso es todo, en el panel inferior debe aparecer el mensaje de 'Successfully created + la ruta completa'



Utilizando Maven plugin

Para dejar en manos de maven la creacion del ejecutable con launch4j, debemos agregar en el pom el siguiente plugin

pom.xml

<plugin>
 <groupId>com.akathist.maven.plugins.launch4j</groupId>
 <artifactId>launch4j-maven-plugin</artifactId>
 <executions>
  <execution>
   <id>l4j-clui</id>
   <phase>package</phase>
   <goals>
    <goal>launch4j</goal>
   </goals>
   <configuration>
    <headerType>gui</headerType>
    <jar>target/saludo-joptionpane-1.0.0-SNAPSHOT.jar</jar>
    <outfile>target/archivoSalidaEjecutable.exe</outfile>
    <downloadUrl>http://java.com/download</downloadUrl>
    <classPath>
     <mainClass>com.github.dariozubaray.Principal</mainClass>
    </classPath>
    <jre>
     <bundledJre64Bit>false</bundledJre64Bit>
     <bundledJreAsFallback>false</bundledJreAsFallback>
     <minVersion>1.5</minVersion>
     <jdkPreference>preferJre</jdkPreference>
     <runtimeBits>64/32</runtimeBits>
    </jre>
   </configuration>
  </execution>
 </executions>
</plugin>

Posteriormente al guardado, podemos ejecutar la fase a partir de package, aunque con maven install hace mas de lo que se necesita es más rápido. El resultado será:



Personalizandolo

Para poersonalizar al menos un poco el ejecutable podemos incluir un icono y un screensplash que es la imagen mientras se carga el programa, para ello debemos modificar la clase main para que se tarde unos segundos antes de arrancar.



Principal.java

public class Principal {
    public static void main(String[] args) {
        try {
            Thread.sleep(5000);
        } catch(InterruptedException ie) {
            ie.printStackTrace();
        }
        String titulo = "Saludos con Launch4j";
        String message = "Hola juli =)";
        int messageType = JOptionPane.INFORMATION_MESSAGE;
        JOptionPane.showMessageDialog(null, message, titulo, messageType);
    }
}

En la pestaña de basic podemos incluir la 'icon' y en la propia de 'splash', luego de habilitarla, la imagen bmp para mostrar mientras se carga la app.

No hay comentarios:

Publicar un comentario