how - manifest.mf java
Uso del archivo MANIFEST.MF en Java (2)
El contenido del archivo Manifest en un archivo JAR creado con la versión 1.0 del Java Development Kit es el siguiente.
Manifest-Version: 1.0
Todas las entradas son como pares nombre-valor. El nombre de un encabezado está separado de su valor por dos puntos. El manifiesto predeterminado muestra que se ajusta a la versión 1.0 de la especificación del manifiesto. El manifiesto también puede contener información sobre los otros archivos que están empaquetados en el archivo. Exactamente qué información de archivo se registra en el manifiesto dependerá del uso previsto para el archivo JAR. El archivo de manifiesto predeterminado no hace suposiciones sobre qué información debe registrar sobre otros archivos, por lo que su única línea contiene datos solo sobre sí mismo. Encabezados de manifiesto de propósito especial
Dependiendo de la función prevista del archivo JAR, el manifiesto predeterminado debe modificarse. Si el archivo JAR se crea solo para fines de archivo, entonces el archivo MANIFEST.MF no tiene ningún sentido. La mayoría de los usos de los archivos JAR van más allá del simple archivo y compresión, y requieren información especial para estar en el archivo de manifiesto. A continuación se resumen las descripciones breves de los encabezados que se requieren para algunas funciones de archivo JAR de propósito especial
Aplicaciones incluidas como archivos JAR: si una aplicación se incluye en un archivo JAR, la máquina virtual Java necesita que se le indique cuál es el punto de entrada a la aplicación. Un punto de entrada es cualquier clase con un método público void estático principal (String [] args). Esta información se proporciona en el encabezado Main-Class, que tiene la forma general:
Main-Class: classname
El nombre de clase de valor debe ser reemplazado por el punto de entrada de la aplicación.
Extensiones de descarga: las extensiones de descarga son archivos JAR a los que hacen referencia los archivos de manifiesto de otros archivos JAR. En una situación típica, un applet se incluirá en un archivo JAR cuyo manifiesto hace referencia a un archivo JAR (o varios archivos JAR) que servirá como una extensión para los propósitos de ese applet. Las extensiones pueden referirse entre sí de la misma manera. Las extensiones de descarga se especifican en el campo del encabezado de la ruta de clase en el archivo de manifiesto de un applet, aplicación u otra extensión. Un encabezado de ruta de clase podría verse así, por ejemplo:
Class-Path: servlet.jar infobus.jar acme/beans.jar
Con este encabezado, las clases en los archivos servlet.jar, infobus.jar y acme / beans.jar servirán como extensiones para propósitos del applet o la aplicación. Las URL en el encabezado Class-Path se dan en relación con la URL del archivo JAR del applet o aplicación.
Sellado de paquetes: un paquete dentro de un archivo JAR puede sellarse opcionalmente, lo que significa que todas las clases definidas en ese paquete deben archivarse en el mismo archivo JAR. Un paquete puede sellarse para garantizar la consistencia de la versión entre las clases de su software o como una medida de seguridad. Para sellar un paquete, se debe agregar un encabezado de Nombre para el paquete, seguido de un encabezado Sellado, similar a esto:
Name: myCompany/myPackage/
Sealed: true
El valor del encabezado Name es el nombre de ruta relativo del paquete. Tenga en cuenta que termina con un ''/'' para distinguirlo de un nombre de archivo. Los encabezados que siguen un encabezado Nombre, sin líneas en blanco intermedias, se aplican al archivo o paquete especificado en el encabezado Nombre. En el ejemplo anterior, dado que el encabezado Sellado ocurre después del encabezado Nombre: miEmpresa / myPaquete, sin líneas en blanco entre ellos, el encabezado Sellado se interpretará como aplicar (solo) al paquete miEmpresa / miPaquete.
Versiones de paquete: la especificación de control de versiones de paquete define varios encabezados de manifiesto para contener información de control de versiones. Se puede asignar un conjunto de dichos encabezados a cada paquete. Los encabezados de versión deben aparecer directamente debajo del encabezado Nombre para el paquete. Este ejemplo muestra todos los encabezados de versiones:
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."
Noté que los archivos JAR, WAR y EAR tienen un archivo MANIFEST.MF
debajo de la carpeta META-INF
.
¿Para qué sirve el archivo MANIFEST.MF
? ¿Qué todas las cosas se pueden especificar en este archivo?
Manifest.MF contiene información sobre los archivos contenidos en el archivo JAR.
Cada vez que se crea un archivo JAR, se crea un archivo manifest.mf predeterminado dentro de la carpeta META-INF y contiene las entradas predeterminadas como esta:
Manifest-Version: 1.0
Created-By: 1.7.0_06 (Oracle Corporation)
Estas son entradas como pares "encabezado: valor". El primero especifica la versión de manifiesto y el segundo especifica la versión de JDK con la que se crea el archivo JAR.
Encabezado de la clase principal: cuando se utiliza un archivo JAR para agrupar una aplicación en un paquete, debemos especificar la clase que sirve un punto de entrada de la aplicación. Proporcionamos esta información usando el encabezado ''Main-Class'' del archivo de manifiesto,
Clase principal: {classname completamente calificado}
El valor de "clase principal" aquí es la clase que tiene el método principal. Después de especificar esta entrada, podemos ejecutar el archivo JAR para ejecutar la aplicación.
Encabezado de Class-Path: la mayoría de las veces necesitamos acceder a los otros archivos JAR de las clases empaquetadas dentro del archivo JAR de la aplicación. Esto se puede hacer proporcionando sus rutas totalmente calificadas en el archivo de manifiesto usando el encabezado ''Class-Path'',
Class-Path: {jar1-name jar2-name directory-name / jar3-name}
Este encabezado se puede usar para especificar los archivos JAR externos en la misma red local y no dentro del JAR actual.
Encabezados relacionados con la versión del paquete: cuando el archivo JAR se utiliza para el control de versiones del paquete, se utilizan los siguientes encabezados según lo especificado por la especificación del lenguaje Java:
Headers in a manifest
Header | Definition
-------------------------------------------------------------------
Name | The name of the specification.
Specification-Title | The title of the specification.
Specification-Version | The version of the specification.
Specification-Vendor | The vendor of the specification.
Implementation-Title | The title of the implementation.
Implementation-Version | The build number of the implementation.
Implementation-Vendor | The vendor of the implementation.
Encabezados relacionados con el sellado de paquetes:
También podemos especificar si algún paquete en particular dentro de un archivo JAR debe sellarse, lo que significa que todas las clases definidas en ese paquete deben archivarse en el mismo archivo JAR. Esto se puede especificar con la ayuda del encabezado ''Sellado'',
Nombre: {paquete / algún paquete /} Sellado: verdadero
Aquí, el nombre del paquete debe terminar con ''/''.
Mejora de la seguridad con archivos de manifiesto:
Podemos usar las entradas de los archivos de manifiesto para garantizar la seguridad de la aplicación web o del applet que empaqueta con los diferentes atributos como ''Permisos'', ''Codebae'', ''Nombre de la aplicación'', ''Sólo confianza'' y muchos más.
Carpeta META-INF:
Esta carpeta es donde reside el archivo de manifiesto. Además, puede contener más archivos que contienen metadatos sobre la aplicación. Por ejemplo, en un archivo JAR de módulo EJB, esta carpeta contiene el descriptor de despliegue EJB para el módulo EJB junto con el archivo de manifiesto para el JAR. Además, contiene el archivo xml que contiene la asignación de referencias abstractas de EJB a los recursos de contenedores concretos del servidor de aplicaciones en el que se ejecutará.
Referencia:
https://docs.oracle.com/javase/tutorial/deployment/jar/manifestindex.html