viernes, 29 de mayo de 2009

QUUE SON LOS JAR 5.

JAR: es un tipo de archivo que permite ejecutar aplicaciones escritas en lenguaje Java.
Como hemos visto una aplicación en Java está compuesta por varios ficheros .java. Al compilarlos obtenemos varios ficheros .class (uno por fichero .java), y no un único fichero ejecutable como ocurre en otros lenguajes. Para colmo, a menudo la aplicación está formada no sólo por los ficheros .class sino que usa ficheros de sonido (usualmente .au en Java), iconos, etc., lo que multiplica la cantidad de ficheros que forman la aplicación compilada. Esto hace que "llevarse" la aplicación para ejecutarla en un ordenador diferente resulte un poco lioso: olvidar cualquiera de los ficheros que componen la aplicación significaría que ésta no va a funcionar correctamente. En el caso de un applet se añade el problema de la velocidad, al tener que viajar todos los ficheros a través de internet.

Los ficheros Jar (Java ARchives) permiten recopilar en un sólo fichero varios ficheros diferentes, almacenándolos en un formato comprimido para que ocupen menos espacio. Es por tanto, algo similar a un fichero .zip (de hecho están basados en ficheros .zip). Entonces, ¿dónde está la "gracia"? ¿No se podrín usar directamente ficheros .zip? La particularidad de los ficheros .jar es que no necesitan ser descomprimidos para ser usados, es decir que el intérprete de Java es capaz de ejecutar los archivos comprimidos en un archivo jar directamente. Por ejemplo, si hemos recopilado todos los ficheros necesarios para ejecutar una aplicación en un fichero "aplic.jar", podemos lanzar la aplicación desde una terminal de texto mediante: java -jar aplic.jar

Hemos visto que se puede lanzar una aplicación llamando al intérprete de java (comando java) seguido de -jar y del nombre del fichero .jar correspondiente. Sin embargo hay algo en todo esto que no "encaja": Si el fichero .jar contiene muchos ficheros .class, ¿cuál de todos se ejecuta? Sabemos que debe ejecutarse el que contiene el método main pero, ¿cómo sabe el intérprete de Java que clase de todas las del fichero contiene este método? La respuesta es que lo sabe porque se lo tenemos que decir durante la creación del fichero jar. Y la forma de hacerlo es un poco liosa. Vamos a verlo paso a paso. Para simplificar suponemos que estamos en un terminal de texto (consola Linux o símbolo del sistema en Windows), que el comando jar es accesible (es decir, la carpeta que contiene jar.exe está en el Path) y que nos encontramos en el directorio donde se encuentran los ficheros .class que deseamos "empaquetar".

Crear un directorio META-INF (¡las mayúsculas son importantes!) y dentro un fichero MANIFEST.MF. Este fichero indica, entre otras cosas, cual será la clase principal. A menudo el fichero MANIFEST.MF contiene una única línea.

El nombre fich.jar es el que nosotros queramos y corresponde al fichero .jar que se creará conteniendo todos los ficheros indicados (en este caso todos los ficheros .class). Se puede comprobar que el contenido del fichero es el el adecuado escribiendo:
jar tf fich.jar
que mostrará la lista de clases contenidas en el fichero. Este comando también puede ser útil para examinar el contenido de las librerías del sistema. Para lanzar el archivo basta con teclear ahora:
java -jar fich.jar

Si alguna vez se quiere "desempaquetar" el contenido de un archivo jar se pueden usar las opciones "xf":
jar fich.jar

Esto puede resultar particularmente útil si queremos echar un vistazo a algunos paquetes del sistema que vienen de esta forma.

No hay comentarios:

Publicar un comentario