1. Presentación
Un archivo Java es un formato de fichero particular que permite agrupar en un solo fichero otros. En general, se agrupan de esta manera todos los ficheros necesarios para el funcionamiento de una aplicación. Esto comprende por supuesto todos los ficheros .class pero también todos los demás recursos indispensables al buen funcionamiento de la aplicación. Esta posibilidad de agrupamiento proporciona numerosas ventajas para el despliegue de aplicaciones.
La primera y seguramente más notable se encuentra en el hecho de que para desplegar una aplicación en otro puesto cliente, sólo se necesita copiar un único fichero, incluso si la aplicación exige para su funcionamiento varios recursos organizados en forma de árbol muy precisa. Se crea este árbol en el interior del archivo y no necesita reproducirse en el puesto cliente.
Los archivos pueden ser comprimidos para optimizar su almacenamiento y su traslado a través de una red.
Esta ventaja es aun más notable para los applets ya que el navegador puede así recuperarlos con una sola petición http.
La seguridad se mejora también mediante firma y sellado del archivo.
El formato de los archivos, aún siendo estándar, no presenta ninguna restricción respecto a un sistema específico.
2. Manipulación de un archivo
La manipulación de un archivo Java (fichero jar) tiene los mismos principios que la manipulación de un archivo en el mundo unix con el comando tar. Las opciones del comando jar que permiten manipular un archivo Java son por otra parte extrañamente similares a las del comando tar de unix. El formato utilizado internamente por los archivos es también muy conocido ya que se trata del formato ZIP. Paralelamente, los archivos Java pueden ser procesados por herramientas destinadas a la manipulación de ficheros ZIP.
El comando estándar de manipulación de archivo es el comando jar. Forma parte de las herramientas proporcionadas con el jdk.
a. Creación de un archivo
La sintaxis básica de creación de un archivo Java es la siguiente: jar cf nombreDelFichero listaFichero
El parámetro c se destina por supuesto a indicar al comando jar que deseamos crear un archivo. El parámetro f, por su parte, indica que el comando debe generar un fichero. El nombre del fichero se indica por el tercer parámetro de este comando. Por convención, la extensión de este fichero será .jar. El último elemento representa el o los ficheros que se deben incluir en el archivo. Si varios ficheros se deben incluir en el archivo, sus nombres se deben separar por un espacio. Se acepta el uso del comodín * en la lista. Si a su vez hay un nombre de directorio en la lista, se añade su contenido entero al archivo.
http://www.eni-training.com/client_net/mediabook.aspx?idR=65896 2/4 META-INF/MANIFEST.MF .classpath .project Cliente$1.class Cliente$2.class Cliente$3.class Cliente$4.class Cliente$5.class Cliente$6.class Cliente.class ClientePizarraMágica.class PanelDibujo.class ThreadEntrada.class jar tvf pizarra.jar
59 Mon Feb 14 11:34:38 CET 2005 META-INF/MANIFEST.MF 247 Tue Feb 08 19:07:22 CET 2005 .classpath
568 Tue Feb 08 19:07:22 CET 2005 .project
1050 Mon Feb 14 08:35:58 CET 2005 Cliente$1.class 1527 Mon Feb 14 08:35:58 CET 2005 Cliente$2.class 3091 Mon Feb 14 08:35:58 CET 2005 Cliente$3.class 1023 Mon Feb 14 08:35:58 CET 2005 Cliente$4.class 1077 Mon Feb 14 08:35:58 CET 2005 Cliente$5.class 1182 Mon Feb 14 08:35:58 CET 2005 Cliente$6.class 6731 Mon Feb 14 08:35:58 CET 2005 Cliente.class
530 Mon Feb 14 08:34:18 CET 2005 ClientePizarraMagica.class 5585 Mon Feb 14 08:36:10 CET 2005 PanelDibujo.class
3146 Mon Feb 14 08:39:36 CET 2005 ThreadEntrada.class archivo. Las opciones siguientes también están disponibles.
v muestra el nombre de los ficheros al añadirlos en el archivo.
0 desactiva la compresión del archivo.
M desactiva la generación del manifest.
m añade el manifest indicado al archivo.
-C suprime el nombre de directorio en el archivo.
b. Visualización del contenido
El contenido de un archivo se puede visualizar con el comando siguiente: jar tf pizarra.jar
El comando muestra en la consola el contenido del archivo.
Se puede obtener información extra al añadir la opción v al comando. Datos como la fecha de modificación y el tamaño de los ficheros se incorporan al resultado del comando.
Las rutas de acceso a los ficheros se visualizan con el carácter / como separador y son relativas a la raíz del archivo. Por supuesto el contenido del archivo no se modifica con la ejecución de este comando.
c. Extracción
Los ficheros pueden ser extraídos del archivo con el comando siguiente: jar xvf pizarra.jar
Se vuelven a crear los ficheros presentes en el archivo, en el directorio actual, del disco. Si el archivo contiene un árbol de directorios, éste vuelve a ser reproducido en el directorio actual. Los eventuales ficheros y directorios existentes son sobreescritos por los presentes en el archivo. La extracción de un archivo puede ser selectiva al indicar como parámetro adicional la lista de los ficheros que se quiere extraer del archivo separando los nombres de estos ficheros por un espacio. El comando siguiente permite extraer del archivo únicamente el ficheroClientePizarraMagica.class.
jar xvf pizarra.jar ClientePizarraMagica.class El contenido del archivo no se modifica con este comando.
d. Actualización
El contenido de un archivo se puede actualizar añadiendo nuevos ficheros después de su creación. En este caso, se debe utilizar el comando siguiente:
jar uf pizarra.jar connect.gif
El último parámetro de este comando representa la lista de los ficheros que se deben actualizar en el archivo. Si estos ficheros no existen en el archivo, se añaden, y si sí, se sustituyen por la nueva versión. Si el archivo contiene directorios, la ruta de acceso completa se debe especificar en la lista de los ficheros que se deben añadir.
e. Ejecución
Una aplicación presente en un archivo Java puede ser ejecutada directamente desde el archivo sin necesitar extraer los ficheros. Debemos indicar a la máquina virtual Java que debe extraer ella misma los ficheros del archivo utilizando la opción -jar durante el lanzamiento de la aplicación. El nombre del fichero archivo se debe especificar a continuación de esta opción.
java -jar pizarra.jar
Sin embargo la máquina virtual Java necesita una información adicional para determinar qué fichero del archivo contiene el método main por el cual debe empezar la ejecución de la aplicación. Para eso, busca el fichero manifest del archivo que debe por supuesto contener esta información para que la aplicación se pueda ejecutar a partir del archivo.
3. El manifest
Los archivos Java son mucho más que meros ficheros comprimidos ya que proponen una multitud de funcionalidades complementarias:
Ejecución directa desde el archivo. Firma del contenido del archivo. Sellado de partes del archivo. Gestión de las versiones.
http://www.eni-training.com/client_net/mediabook.aspx?idR=65896 4/4
Manifest-Version: 1.0
Created-By: 1.6.0 (Sun Microsystems Inc.) Main-Class: ClientePizarraMagica
Todas estas funcionalidades están disponibles mediante el fichero manifest incluido en el archivo.
a. Presentación
El fichero manifest es un mero fichero de texto que contiene pares compuestos por el nombre de parámetro y el valor de parámetro. Estos dos datos se separan por el carácter : (dos puntos).
Este fichero siempre se nombra MANIFEST.MF y se encuentra en el directorio META-INF del archivo.
b. Creación
Al crear un archivo, se crea un fichero manifest por defecto. Contiene la información siguiente: Manifest-Version: 1.0
Created-By: 1.6.0 (Sun Microsystems Inc.)
La primera línea indica la versión del fichero manifest, la segunda indica la versión del jdk con la cual se generó el archivo.
Para añadir más información al fichero manifest, debemos proceder en dos etapas. Primero, debemos preparar un fichero texto que contenga la información que deseamos incluir en el manifest del archivo. La última línea de este fichero debe terminar obligatoriamente con un carácter retorno de carro o salto de línea (o los dos). Luego debemos fusionar este fichero de texto con el manifest por defecto del archivo utilizando la opción m del comando jar. Por lo tanto la sintaxis del comando es la siguiente:
jar cfm pizarra.jar infos.txt *
Este comando genera un archivo llamado pizarra.jar que contiene todos los ficheros del directorio actual y añade al manifest por defecto los datos contenidos en el fichero infos.txt. Este fichero puede contener por ejemplo una información que permite indicar el nombre de la clase que contiene el método main por el cual se debe empezar la ejecución de la aplicación. El ficheroinfos.txt contiene en nuestro caso la línea siguiente:
Main-Class: ClientePizarraMagica
No olvidar el retorno de carro al final de la línea y el espacio después del carácter : (dos puntos). El archivo se genera con el fichero manifest siguiente:
La versión del comando jar proporcionada con el jdk 6 propone también la opción e que permite indicar el punto de entrada en la aplicación sin tener que crear un fichero intermedio. La sintaxis puede ser por lo tanto la siguiente: