1 archivos jar

4
Programación RafaC 2005/2006 Ficheros JAR 1 ¿Qué son los ficheros JAR? 2 Creación en un terminal de texto 3 Applets 4 Creando ficheros .jar desde JCreator 1 ¿Qué son los ficheros JAR? 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 Vamos a ver ahora cómo se crean los ficheros .jar. 2 Creación en un terminal de texto

Transcript of 1 archivos jar

Programación ­ RafaC ­ 2005/2006

Ficheros JAR

1 ¿Qué son los ficheros JAR?

2 Creación en un terminal de texto

3 Applets

4 Creando ficheros .jar desde JCreator

1 ¿Qué son los ficheros JAR?

Como hemos visto una aplicación en Java está compuesta por varios ficheros .java. Al compilarlosobtenemos varios ficheros .class (uno por fichero .java), y no un único fichero ejecutable como ocurreen otros lenguajes. Para colmo, a menudo la aplicación está formada no sólo por los ficheros .classsino que usa ficheros de sonido (usualmente .au en Java), iconos, etc., lo que multiplica la cantidad deficheros que forman la aplicación compilada. Esto hace que "llevarse" la aplicación para ejecutarla enun ordenador diferente resulte un poco lioso: olvidar cualquiera de los ficheros que componen laaplicación significaría que ésta no va a funcionar correctamente. En el caso de un applet se añade elproblema 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 similara un fichero .zip (de hecho están basados en ficheros .zip). Entonces, ¿dónde está la "gracia"? ¿No sepodrín usar directamente ficheros .zip? La particularidad de los ficheros .jar es que no necesitan serdescomprimidos para ser usados, es decir que el intérprete de Java es capaz de ejecutar los archivoscomprimidos en un archivo jar directamente. Por ejemplo, si hemos recopilado todos los ficherosnecesarios para ejecutar una aplicación en un fichero "aplic.jar", podemos lanzar la aplicación desdeuna terminal de texto mediante:

java ‐jar aplic.jar

Vamos a ver ahora cómo se crean los ficheros .jar.

2 Creación en un terminal de texto

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 queno "encaja": Si el fichero .jar contiene muchos ficheros .class, ¿cuál de todos se ejecuta? Sabemos quedebe ejecutarse el que contiene el método main pero, ¿cómo sabe el intérprete de Java que clase detodas las del fichero contiene este método? La respuesta es que lo sabe porque se lo tenemos que decirdurante 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 sistemaen Windows), que el comando jar es accesible (es decir, la carpeta que contiene jar.exe está en elPath) 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 ficheroMANIFEST.MF. Este fichero indica, entre otras cosas, cual será la clase principal. Amenudo el fichero MANIFEST.MF contiene una única línea:

Main‐Class: Principal

indicando que Principal.class es la clase que contiene el método main.

Observación : El fichero MANIFEST.MF se puede crear con cualquiereditor de texto. Hay que introducir un fin de línea (enter) tras la última lineacon texto.

Crear el fichero .jar mediante el comando

jar cfm fich.jar META‐INF/MANIFEST.MF *.class

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 usarlas opciones "xf":

jar fich.jar

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

3 Applets

Aunque aún no sepamos demasiadas cosas sobre applets este es un buen punto para indicar como sedebe usar la herramienta jar en relación a los applets. Vamos a verlo con un ejemplo: supongamos quetenemos un applet de nombre TicTacToe.java. Suponemos que ya está compilado, es decir que yaexiste el fichero TicTacToe.class. Además suponemos que este applet utiliza imágenes, que seencuentran en una carpeta images y sonidos que se encuentran en una carpeta sounds. Es decir,tenemos (resultado de hacer "dir" en un símbolo del sistema): Queremos crear un fichero .jar paraguardar toda esta información en un único fichero, que será el que "viaje" por internet. Para ello sehace:

jar ‐cf titac.jar TicTacToe.class audio images

Como se puede ver no se ha incluido el fichero TicTacToe.java (porque no es necesario para laejecución del programa, aunque se podría haber incluido si se hubiera querido). Ya tenemos el ficherotictac.jar creado. Para cargar el applet desde una página html sólo debemos copiar este fichero a lamisma carpeta donde este la página. La página por su parte debe incluir un código similar al siguientecódigo para "incrustar" el programa Java:

<applet code="TicTacToe.class" archive="tic.jar" width="120" height="120"> </applet>

4 Creando ficheros .jar desde JCreator

Se puede configurar JCreator para llamar al comando jar. Brevemente estos son los pasos a seguir unavez:

Dentro del menú Configure elegir la opción Options .

En la ventana que aparece, hacemos click sobre la palabra Tools que aparece en la listade la izquierda. La pantalla tendrá el aspecto:

tools(salvo porque la parte derecha no estará vacía si ya hemos introducido otras herramientascomo los accesos a javadoc).

Pulsar el botón New y del menú desplegable que aparece elegir la opción: Create JarFile . Pulsamos "OK" y ya tenemos JCreator para crear ficheros .jar con el contenido delproyecto que tengamos Java, sin más que pulsar el botón de herramientas que hayamos

configurado (la llave inglesa con el número correspondiente, por ejemplo 1 si es laprimera herramienta que configuramos). De todas formas hay que hacer algunasobservaciones:

Un fallo (gordo) de esta herramienta es que no crea un fichero MANIFESTadecuado. Esto hace que el "empaquetamiento" sea útil para applets (donde elfichero MANIFEST no importa), pero no para aplicaciones con main.El fichero generado lleva el nombre del proyecto (y extensión .jar, obviamente).Queda almacenado en el directorio del proyecto de JCreator. A menudo pareencontrarlo lo más fácil es usar el buscador de Windows.

Observación: Por supuesto los pasos anteriores sólo hay que hacerlos una vez; lapróxima vez que entremos en JCreator se podrán usar las herramientas directamente.

2004­2005 Rafael Caballero