Despliegue de aplicaciones
Creación de archivos (JAR y WAR)
1. Presentación
Un archivo de Java es un formato de archivo particular que permite agrupar en un único archivo a varios. En general, se agrupan de esta manera todos los archivos necesarios para el funcionamiento de una aplicación. Esto comprende por supuesto todos los archivos .class, pero también todos los demás recursos indispensables para el correcto funcionamiento de la aplicación. Esta posibilidad de agrupación proporciona numerosas ventajas para el despliegue de aplicaciones.
-
La primera y seguramente más notable se encuentra en el hecho de que, para desplegar una aplicación en otro puesto cliente o el servidor remoto, solo se necesita copiar un único archivo, incluso si la aplicación exige para su funcionamiento varios recursos organizados en forma de árbol de manera precisa. Se crea este árbol en el interior del archivo y no necesita reproducirse en el puesto cliente o el servidor remoto.
-
Los archivos pueden comprimirse para optimizar su almacenamiento y su intercambio a través de una red.
-
La aplicación puede incorporar todos los recursos necesarios y un entorno minimalista de ejecución de Java necesario para la ejecución de la aplicación sin tener que instalar el JRE.
2. Manipulación de un archivo
Manipular un archivo Java (archivo JAR - Java ARdone) utiliza los mismos principios que manipular un archivo en el mundo Unix con el comando tar. El comando estándar para manipular archivos Java es el comando jar. Es una de las herramientas que vienen con el JDK y se puede encontrar en el directorio bin de la instalación del JDK. Las opciones en el comando jar, que están destinadas a manejar un archivo JAR, son muy similares a las del comando tar de Unix. El formato utilizado internamente por los archivos de archivo Java también es bien conocido, ya que es el formato ZIP. Por tanto, es posible manipular un archivo JAR con herramientas dedicadas a archivos ZIP.
Un archivo JAR suele contener clases Java compiladas (archivos .class), así como varios recursos asociados, como archivos de configuración o imágenes. Se utiliza principalmente para distribuir librerías o para empaquetar una aplicación Java independiente, en cuyo caso puede incluir un archivo manifiesto que indique la clase principal.
Un archivo...
Creación de aplicaciones nativas
Java, aunque históricamente se asocia con la portabilidad gracias a la JVM (Java Virtual Machine), también permite crear aplicaciones nativas. Estas aplicaciones se ejecutan directamente en el sistema operativo sin necesidad de una JVM externa, lo que puede mejorar el rendimiento y simplificar el despliegue.
Crear una aplicación nativa en Java depende principalmente del uso de las herramientas proporcionadas por el JDK, incluyendo jmod, jdeps, jlink y jpackage. Estas herramientas ayudan a reducir el tamaño de la aplicación, optimizar dependencias y generar un runtime mínimo (es decir, un entorno de ejecución Java optimizado que contiene solo los componentes necesarios para ejecutar la aplicación) adaptado a las necesidades específicas de su programa.
Desde Java 9, la API de Java es modular. Una de las consecuencias es que, en tiempo de ejecución, solo es necesario cargar los módulos de los que depende una aplicación para que esta funcione. Oracle fue aún más lejos al hacer posible crear un árbol de directorios y archivos que contengan estos módulos, la herramienta java y el archivo de una aplicación. Este directorio se puede comprimir o integrar fácilmente en un instalador para implementarlo en las máquinas de destino. Un ejemplo de utilización de la herramienta jpackage mostrará la creación de un instalador, un poco más adelante en este capítulo.
Desde Java 9, el API de Java se basa en una arquitectura modular. Una consecuencia de esta evolución es que, en tiempo de ejecución, solo es necesario cargar explícitamente los módulos que requiere una aplicación para garantizar su correcto funcionamiento. Oracle ha llevado esta lógica más allá al introducir la posibilidad de generar un árbol de archivos y directorios que contengan los módulos necesarios, la propia herramienta Java, así como el archivo de la aplicación. Entonces, este directorio se puede comprimir o integrar en un instalador para su despliegue en las máquinas destino. Un ejemplo de cómo usar la herramienta jpackage ilustrará más adelante en este capítulo cómo crear un instalador así (véase la sección Creación de un instalador...
Externalización de los argumentos
La aplicación así empaquetada es operativa. El principal problema pendiente es la cadena de conexión a la base de datos, que se escribe en la clase TestPreparedStatement. Es necesario externalizarlo para poder modificarlo según el contexto. Esto requiere modificar el programa antes de volver a empaquetarlo.
1. Creación del archivo de configuración
En Java, los archivos de configuración normalmente son los archivos properties o los archivos xml. Para los fines de este libro, se utilizó un archivo properties.
Un archivo de este tipo contiene pares clave/valor, escritos en una línea de la siguiente forma:
unaClave=unValor
otraClave=otroValor
El separador entre la clave y el valor es el carácter =.
Para crear dicho archivo, siga este procedimiento:
Cree un directorio conf (el nombre no tiene ninguna importancia) en la raíz del proyecto. No lo coloque en el directorio src porque no tiene el propósito de ser incorporado al archivo.
Haga clic con el botón derecho en este directorio para crear un nuevo archivo.
Introduzca un nombre para el archivo (application.properties, por ejemplo).
Valide la creación de un nuevo archivo.
Al final de esta etapa, el proyecto debe tener el siguiente aspecto:
.
|-- conf
| `-- application.properties
|-- lib
| `-- mysql-connector-j-9.0.0.jar ...Creación de un instalador con jpackage
Ha aparecido una nueva herramienta en el ecosistema Java: jpackage. El objetivo de esta herramienta es crear un instalador que permita facilitar el despliegue de una aplicación. Esta herramienta se utiliza para generar un instalador adaptado a la plataforma sobre la que se ejecuta. En una máquina Linux, el archivo generado de forma predeterminada es un archivo *.deb. En el caso de una máquina macOS, esto será un *.dmg. En el caso de una máquina Windows, será un archivo *.exe.
A continuación, este archivo se puede ejecutar para instalar la aplicación que contiene. En Linux se instalará usando el siguiente comando:
sudo apt install ./miArchivoDExtensionDeb
La herramienta jpackage contiene una gran cantidad de opciones para configurar el instalador. La presentación de la herramienta está disponible en la documentación oficial en el sitio web de Oracle, en la siguiente dirección: https://docs.oracle.com/en/java/javase/21/jpackage/packaging-overview.html
Conclusión
Este capítulo le ha permitido descubrir algunos aspectos del despliegue de una aplicación escrita en Java. En un contexto profesional, con un proyecto más complejo, será necesario por supuesto profundizar en el tema. Sin embargo, estas pocas páginas lo ayudan a comenzar.