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