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
- Descargar launch4j desde launch4j en sourceforge
- Contar con una aplicacion ejecutable con un main
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