Los ficheros JAR pueden soportan un amplio rango de funcionalidades, incluyendo la firma electr�nica, el control de versiones, el sellado de paquetes, las extensiones, etc. �Qu� le da a los ficheros JAR la habilidad para ser tan vers�tiles? La respuesta se encuentra dentro del manifiesto de los ficheros JAR.
El manifiesto es un fichero especial que puede contener informaci�n sobre los otros ficheros empaquetados en un fichero JAR. Personalizar la informaci�n "meta" del manifiesto, te permite utilizar los ficheros JAR para una gran variedad de prop�sitos.
Antes de ver algunas de las formas en que puede ser modificado el manifiesto para permitir funcionalidades especiales a los ficheros JAR, echemos un vitazo a la l�nea base del manifiesto por defecto.
�El Manifiesto por defecto
Siempre que creas un fichero JAR, autom�ticamente recibe un fichero de manifiesto por defecto. S�lo puede haber un fichero de manifiesto en un fichero JAR, y siempre debe tener el path.
META-INF/MANIFEST.MF
Cuando un fichero JAR es creado con la versi�n 1.2 del JDK, el manifiesto por defecto es muy sencillo. Aqu� tienes todo su contenido.
Manifest-Version: 1.0 Created-By: Manifest JDK1.2
Como puedes ver en este ejemplo, las entradas de un fichero de manifiesto tienen la forma de parejas: "cabecera:valor". El nombre de una cabecera est� separado de su valor por dos puntos.
El manifiesto mostrado arriba es conforme a la versi�n 1.0 de la especificaci�n de manifiesto y ha sido creado con la versi�n 1.2 del JDK, Estas son propiedades del propio manifiesto, pero tambi�n puede contener informaci�n sobre otros ficheros empaquetados en el archivo.
La informaci�n exacta grabada en el fichero de manifiesto depende del uso previsto del fichero JAR. El fichero de manifiesto por defecto no asume nada sobre la informaci�n que deber�a almacenar sobre otros ficheros, por eso s�lo contiene datos sobre �l mismo.
El formato del fichero de manifiesto por defecto cambia de la versi�n 1.1 a la versi�n 1.2 del JDK. Si creas un fichero JAR para el paquete, java.math, por ejemplo, el fichero de manifiesto por defecto del JDK 1.1 se parecer�a a esto.
Manifest-Version: 1.0 Name: java/math/BigDecimal.class Digest-Algorithms: SHA MD5 SHA-Digest: TD1GZt8G11dXY2p4olSZPc5Rj64= MD5-Digest: z6z8xPj2AW/Q9AkRSPF0cg== Name: java/math/BigInteger.class Digest-Algorithms: SHA MD5 SHA-Digest: oBmrvIkBnSxdNZzPh5iLyF0S+bE= MD5-Digest: wFymhDKjNreNZ4AzDWWg1Q==
Al contrario que el manifiesto del JDK 1.2 el del JDK 1.1 tiene entradas para cada uno de los ficheros contenidos en el archivo, incluyendo los paths de los ficheros y valores digest. Estos �ltimos valores son solo importantes con respecto a la firma de ficheros JAR. De echo, el por qu� la informaci�n digest no est� en el fichero de manifiesto del JDK 1.2 - es porque nunca la necesita. Para aprender m�s sobre la firma, puedes ver la lecci�n Firmar y Autentificar ficheros JAR.
�Cabeceras de Manifiesto para Prop�sitos Especiales
Dependiendo del papel que quieres que juegue tu fichero JAR, podr�as modificar el manifiesto por defecto. S� s�lo estas interesado en las caracteristicas "ZIP" del fichero JAR como la compresi�n o el archivado, no tendr�s que preocuparte del fichero de manifiesto. Este fichero no juega ning�n papel en estas situaciones.
La mayor�a de los usos de los ficheros JAR que van m�s all� del simple archivado y comprensi�n necesitan que alguna informaci�n especial sea almacenada en el fichero de manifiesto. Abajo tienes una breve descripci�n de las cabeceras requeridas para algunas funciones de prop�sito especial de los ficheros JAR.
Aplicaciones empaquetadas en ficheros JAR - s�lo versi�n 1.2
Si tienes una aplicaci�n en un fichero JAR, necesitas indicar de alguna forma que clase es el punto de entrada de las que se incluyen en el fichero JAR. (Recuerda que el punto de entrada es una clase que tenga un m�todo con la firma: public�static�void�main(String[]�args).)
Esta informaci�n se proporciona con la cabecera Main-Class, que tiene esta forma general.
Main-Class: classname
donde classname es el nombre de la clase que es el punto de entrada de la aplicaci�n.
Descarga de Extensiones - s�lo versi�n 1.2
La descarga de extensiones son ficheros JAR que son referenciados por el fichero de manifiesto de otros ficheros JAR. En una situaci�n t�pica, un applet estar�a empaquetado en un fichero JAR cuyo manifiesto referenciara a un fichero JAR (o a varios ficheros JAR) que servir�n como una extensi�n para los prop�sitos del applet. Las extensiones pueden referenciarse unas a otras de la misma forma.
La descarga de extensiones se especifica en el campo de cabecera Class-Path en el fichero de manifiesto del applet, aplicaci�n, u otra extensi�n. Una cabecera Class-Path se podr�a parecer a esto, por ejemplo.
Class-Path: servlet.jar infobus.jar acme/beans.jar
Con esta cabcera, las clases de los ficheros servlet.jar, infobus.jar, y acme/beans.jar servir�n como extensiones para los prop�sitos del applet o aplicaci�n. Las URLs en la cabecera Class-Path son relativas a la URL del fichero JAR del applet o de la aplicaci�n.
Sellado de Paquetes - s�lo versi�n 1.2
Los paquetes almacenados en ficheros JAR pueden ser sellados opcionalmente para que el paquete pueda reforzar su consistencia. El sellado de un paquete dentro de un fichero JAR significa que todas las clases definidas en ese paquete deben encontrarse dentro del mismo fichero JAR.
Un paquete puede sellarse a�adiendo la cabecera Sealed.
Name: myCompany/myPackage/ Sealed: true
Versionado de Paquetes - s�lo versi�n 1.2
La pagina Especificaci�n de Versionado de Paquetes define varias cabeceras de manifiesto para contener informaci�n del versionado. Un conjunto de dichas cabeceras puede ser asignado a cada paquete. Las cabeceras de versionado deber�an aparecer directamente debajo de la cabecera name del paquete. Este ejemplo muestra las cabeceras de versionado.
Name: java/util/ Specification-Title: "Java Utility Classes" Specification-Version: "1.2" Specification-Vendor: "Sun Microsystems Inc.". Implementation-Title: "java.util" Implementation-Version: "build57" Implementation-Vendor: "Sun Microsystems. Inc."
�Informaci�n Adicional
La Especificaci�n del formato de manifiesto es forma parte de la documentaci�n on-line del JDK.