03 octubre 2005

Meter todo nuestro programa java en un solo jar

A veces hacemos un programa java que tira de otros jar externos. Por ejemplo, si hacemos un programa de base de datos contra oracle, necesitamos el jar con el driver de oracle, es decir, el ojdbc14.jar. También podemos usar para sacar nuestros mensajes de error el log4j, y necesitamos el jar correspondiente log4j.jar

Cuando metemos nuestro programa en un jar, en nuestro fichero de manifiesto podemos poner que necesitamos esos jar externos. Sería algo como esto

Manifest-Version: 1.0
Class-Path: ./ojdbc14.jar ./log4j.jar
Main-Class: MiPaquete.MiClasePrincipal


Esto va más o menos bien. El problema es que junto con nuestro jar debemos entregar los otros jar. Es decir, nuestra aplicación está compuesta de tres jar, el nuestro, el de la base de datos y el del logger.

Hay una librería de sourceforge que permite empaquetar esos jar externos dentro de nuestro jar. De esta forma, dentro de nuestro jar meteríamos también el ojdbc14.jar y el log4j.jar, junto con nuestras clases.

De esta forma, nuestra aplicación se entregaría en un único MiPrograma.jar. Todos los demás jar necesarios estaría dentro.

Aunque no lo he probado todavía, parece que simplemente hay que bajarse el one-jar-boot.jar. Al desempaquetarlo salen varias clases y un fichero de manifiesto boot-manifest.mf. Ahora sólo tenemos que añadir a nuestro jar esas clases y ese nuevo fichero de manifiesto. Con ello, nuestro jar buscará los jar que indiquemos en el atributo "Class-Path" de nuestro fichero de manifiesto original, dentro del jar y no en el disco duro.

No hay comentarios: