[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Instalación de aplicaciones Java stand-alone



Hola,

Recientemente me he visto envuelto en el desarrollo de una aplicación 
stand-alone ejecutable desde linea de comandos.
El resultado de la compilación de dicha aplicación se empaqueta en un jar (el 
cual define la clase a ejecutar en el atributo Main-Class de su manifest). 
Nada interesante hasta ahora. El problema es un viejo conocido en estos 
casos: cómo hacer que la distribución de la aplicación sea fácil, a pesar de 
las dependencias que ésta pueda tener.

En la especificación, se indica que se puede definir un atributo Class-Path 
con las dependencias, pero está pensado para applets, cuyas dependencias se 
pueden obtener del mismo servidor desde el que se descargó el propio applet.

Una solución bastante extendida es usar un instalador gráfico. Con eso se 
facilita la instalación, pero simplemente oculta la gestión de las 
dependencias, aparte de obligar a disponer de un gestor de ventanas para 
ejecutarlo, por no hablar de que se introduce una dependencia adicional.

Para solucionar estas situaciones se puede usar one-jar [1], que permite:
1) Empaquetar el jar y sus dependencias en un único jar (a-la war).
2) Respetar el Main-Class original, de forma que la aplicación se ejecuta con 
java -jar archivo.jar.

Este método se basa en organizar el jar final de forma que el jar de la 
aplicación esté en el directorio "main", y sus dependencias en "lib". El 
resto del jar lo compone el propio contenido de one-jar.jar.
Internamente, lo que hace es crear un ClassLoader propio que pre-carga las 
dependencias y la aplicación, antes de ejecutar el Main-Class original.

Si en el sistema operativo se asocia la acción de "java -jar " a cualquier 
fichero con extensión .jar se consigue ejecutar aplicaciones Java con un 
simple clic. Recuerdo haber tenido que pelearme hace ya años con aplicaciones 
tipo java2exe :).

Un saludo,
Jose.

[1] http://one-jar.sf.net

Attachment: pgpHRiC6MJ0VL.pgp
Description: PGP signature