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