He pensado escribir una última parte de este tutorial para mostrar como desplegar (es decir empaquetar y publicar) la aplicación de libreta de direcciones.
Contenidos en Parte 7
- Desplegando nuestra aplicación JavaFX como un Paquete nativo con e(fx)clipse
Qué es el despliegue
El despliegue es el proceso de empaquetar y distribuir o hacer llegar una aplicación al usuario. Es una fase crucial del desarrollo porque es el primer contacto del usuario final con nuestro software.
Java se anuncia con el slogan Escribe una vez, ejecuta donde sea para ilustar sobre los beneficios multi-plataforma del lenguaje Java. Idealmente, esto significa que nuestra aplicación Java puede ser ejecutada en cualquier dispositivo equipado con una Máquina Virtual Java (JVM).
En el pasado, la experiencia de usuario instalando una aplicación Java no ha sido siempre agradable. Si el usuario no tenía en su sistema la versión requerida de Java Runtime (JRE), debía ser guíado para su instalaci´no previa. Esto originaba ciertas dificultades, como problemas de privilegios (había que ser administrador) o problemas de compatibilidad.
Afortunadamente, JavaFX ofrece una nueva opción para el despliegue de una aplicación denominada Native Packaging (también llamada Self-Contained Application Package). Un paquete nativo es un lote que contiene tanto la aplicación como la JRE específica requerida.
Orable en su documentación oficial sobre JavaFX ofrece una guía extensiva de todas las opciones de despliegue en su JavaFX deployment options.
En esta parte del tutorial mostraré como crear un paquete nativo con Eclipse y el plugin e(fx)clipse.
Crea una paquete nativo
El objetivo es crear una aplicación auto-contenida en una carpeta. Esta es la apariencia que tendrá la aplicación de libreta de direcciones (en Windows):
La carpeta app
contiene los datos de nuestar aplicación y el runtime
de Java específico de la plataforma.
Para hacérselo incluso más fácil al usuario, vamos a proporcionar un instalador:
- Un archivo de instalación
.exe
para Windows. - Un archivo de instalación
.dmg
(drag & drop) para MacOS.
El plugin e(fx)clipse nos ayudará a generar el paquete nativo y el instalador.
Paso 1 - Edita build.fxbuild
El archivo build.fxbuild
es utilizado por e(fx)clipse parar generar otro archivo
que a su vez será usado por la herramienta Ant. (Si no tuvieras el archivo build.fxbuild
, crea un nuevo proyecto JavaFX en Eclipse y copia el archivo generado)
Abre
build.fxbuild
desde la raíz de tu proyecto.Rellena todos los campos que contengan una estrella. Para usuarios de MacOS: no uses espacios en el título de la aplicación porque puede ocasionar un problema.
Como Packaging Format elige entre
exe
para Windows,dmg
para MacOS, orpm
para Linux.Pincha en el enlace
Generate ant build.xml only
(se encuentra en el lado derecho).
Verifica que se ha creado una nueva carpeta denominada
build
así como un archivobuild.xml
.
Paso 2 - Añade iconos de instalación
Nos gustaría tener algunos iconos para nuestro instalador:
- AddressApp.ico para el icono de la aplicación una vez instalada
- AddressApp-setup-icon.bmp para la pantalla del programa de instalación
- AddressApp.icns para el instalador de Mac
- Crea las siguientes subcarpetas en la carpeta
build
:build/package/windows
(sólo para Windows)build/package/macos
(sólo para MacOS)
- Copia los iconos indicados arriba en las subcarpetas que correspondan. Debería tener esta apariencia ahora:
- Importante: El nombre de los iconos debe coincidir exactamente con el título de la aplicación tal y como ha sido especificada en la propiedad Application title del archivo
build.fxbuild
:YourAppTitle.ico
YourAppTitle-setup-icon.bmp
YourAppTitle.icns
Paso 3 - Añade recursos
Nuestra carpeta resources
no se copia automáticamente, debemos añadirla nosotros a la carpeta build
:
- Crea una subcarpeta denominada
dist
dentro de la carpetabuild
. - Copia la carpeta
resources
(conteniendo las imágenes de nuestra aplicación) dentro debuild/dist
.
Paso 4 - Edita build.xml para incluir iconos
E(fx)clipse ha generado un archivo build/build.xml
que está listo para ser ejecutado por Ant. Sin embargo los iconos y las imágenes que tenemos en la carpeta resources
no se incluirán en el paquete nativo.
Como todavía no se le puede indicar a e(fx)clipse que incluya recursos adicionales como nuestra carpeta resources
y los iconos anteriores, tenemos que editar el archivo build.xml
manualmente:
Abre para edición el archivo build.xml
y encuentra la ruta fxant
. Añade una línea para indicar el directorio base ${basedir}
(esto hará que nuestros iconos estén disponibles):
build.xml - añade “basedir”
<path id="fxant"> <filelist> <file name="${java.home}\..\lib\ant-javafx.jar"/> <file name="${java.home}\lib\jfxrt.jar"/> <file name="${basedir}"/> </filelist> </path>
Encuentra el bloque fx:resources id="appRes"
más abajo en el archivo y añade una línea para nuestros resources
:
build.xml - añade “resources”
<fx:resources id="appRes"> <fx:fileset dir="dist" includes="AddressApp.jar"/> <fx:fileset dir="dist" includes="libs/*"/> <fx:fileset dir="dist" includes="resources/**"/> </fx:resources>
Por alguna razón el número de versión se añade a la aplicación (propiedad fx:application
) lo que hace que el instalador adopte siempre el valor por defecto1.0
(tal y como han indicado varios comentarios). Para corregir esto, hay que añadir el número de versión de forma manual (gracias a Marc por descubrir como hacerlo):
build.xml - añade número de “version”
<fx:application id="fxApplication" name="AddressApp" mainClass="ch.makery.address.MainApp" version="1.0" />
Ya podemos ejecutar build.xml
con Ant. Esto generará un jar ejecutable del proyecto. Pero queremos ir un paso más allá y crear un práctico instalador.
Paso 5 (WINDOWS) - Instalador de Windows (exe)
Con el programa Inno Setup podemos crear un instalador Windows de nuestra aplicación como un único archivo .exe
. El archivo resultante realizará una instalación a nivel de usuario (no se requieren permisos de administrador). Además se creará un enlace (menú de inicio o escritorio).
Descarga Inno Setup 5 o posterior. Instala Inno Setup en tu computadora. Nuestro script Ant lo usará automáticamente para generar el instalador.
Publica la ruta donde está instalado Inno Setup (e.g.
C:\Program Files (x86)\Inno Setup 5
). Para hacerlo, añade esa ruta a la variablePath
en tus variables de entorno de Windows. Si no sabes donde encontrarlas, leeHow to set the path and environment variables in Windows.Reinicia Eclipse y continúa con el Paso 5.
Paso 5 (MAC) - Instalador de MacOS (dmg)
Para crear un instalador de Mac OS (dmg
) no se requiere ninguna herramienta adicional.
Nota: Para que la imagen del instalador funcione debe tener exactamente el mismo nombre que la aplicación.
Paso 5 (LINUX etc.) - Instalador de Linux (rpm)
Para otras opciones de instalación (ej. msi
para Windows o rpm
para Linux) consulta este artículo o la documentación de Oracle.
Paso 6 - Ejecuta build.xml
Como último paso, tenemos que ejecutar build.xml
con Ant: Clic derecho sobre build.xml
| Run As | Ant Build.
La ejecución de build.xml
puede tardar un poco (dependiendo de la máquina que lo ejecute).
Si el proceso concluye con éxito, deberías encontrar un lote de instaladores nativos en la carpeta build/deploy/bundles
. Este el aspecto que tiene la versión de Windows:
El archivo AddressApp-1.0.exe
puede ser como arhivo de instalación independiente. Este instalador copiará el lote en C:/Users/[yourname]/AppData/Local/AddressApp
.
¿Qué es lo siguiente?
Espero que este tutorial te haya resultado de ayuda iniciarte en JavaFX y a partir de aquí seas capaz de desarrollar tu propio proyecto.
Cualquier feedback es bienvenido. No dudes en comentar si tienes sugerencias que hacer o algo no te ha quedado claro.