117 votes

Utilisation du fichier MANIFEST.MF en Java

J'ai remarqué que les fichiers JAR, WAR et EAR ont une icône MANIFEST.MF sous l'onglet META-INF dossier.

Quelle est l'utilité de la MANIFEST.MF fichier ? Quelles sont toutes les choses qui peuvent être spécifiées dans ce fichier ?

106voto

Frank Points 5808

Le contenu du fichier Manifest d'un fichier JAR créé avec la version 1.0 du kit de développement Java est le suivant.

Manifest-Version: 1.0

Toutes les entrées sont des paires nom-valeur. Le nom d'un en-tête est séparé de sa valeur par deux points. Le manifeste par défaut indique qu'il est conforme à la version 1.0 de la spécification du manifeste. Le manifeste peut également contenir des informations sur les autres fichiers qui sont emballés dans l'archive. Les informations exactes sur les fichiers enregistrées dans le manifeste dépendent de l'utilisation prévue du fichier JAR. Le fichier manifeste par défaut ne fait aucune supposition quant aux informations qu'il doit enregistrer sur les autres fichiers, de sorte que sa ligne unique ne contient que des données le concernant. En-têtes de manifeste à usage spécial

En fonction du rôle prévu pour le fichier JAR, le manifeste par défaut peut devoir être modifié. Si le fichier JAR est créé uniquement à des fins d'archivage, le fichier MANIFEST.MF n'est d'aucune utilité. La plupart des utilisations des fichiers JAR vont au-delà du simple archivage et de la compression et nécessitent la présence d'informations spéciales dans le fichier manifeste. Vous trouverez ci-dessous une brève description des en-têtes qui sont nécessaires pour certaines fonctions spéciales des fichiers JAR.

Applications regroupées sous forme de fichiers JAR : Si une application est regroupée dans un fichier JAR, il faut indiquer à la machine virtuelle Java quel est le point d'entrée de l'application. Un point d'entrée est toute classe possédant une méthode public static void main(String[] args). Cette information est fournie dans l'en-tête Main-Class, qui a la forme générale suivante :

Main-Class: classname

La valeur classname doit être remplacée par le point d'entrée de l'application.

Télécharger les extensions : Les extensions de téléchargement sont des fichiers JAR qui sont référencés par les fichiers manifestes d'autres fichiers JAR. Dans une situation typique, une applet sera regroupée dans un fichier JAR dont le manifeste fait référence à un fichier JAR (ou plusieurs fichiers JAR) qui servira d'extension pour les besoins de cette applet. Les extensions peuvent se référer les unes aux autres de la même manière. Les extensions de téléchargement sont spécifiées dans le champ d'en-tête Class-Path du fichier manifeste d'une applet, d'une application ou d'une autre extension. Un en-tête Class-Path peut ressembler à ceci, par exemple :

Class-Path: servlet.jar infobus.jar acme/beans.jar

Avec cet en-tête, les classes des fichiers servlet.jar, infobus.jar et acme/beans.jar serviront d'extensions pour les besoins de l'applet ou de l'application. Les URL dans l'en-tête Class-Path sont données par rapport à l'URL du fichier JAR de l'applet ou de l'application.

Fermeture de l'emballage : Un package dans un fichier JAR peut être optionnellement scellé, ce qui signifie que toutes les classes définies dans ce package doivent être archivées dans le même fichier JAR. Un package peut être scellé pour garantir la cohérence des versions des classes de votre logiciel ou par mesure de sécurité. Pour sceller un paquet, un en-tête Name doit être ajouté pour le paquet, suivi d'un en-tête Sealed, similaire à celui-ci :

Name: myCompany/myPackage/
Sealed: true

La valeur de l'en-tête Name est le nom de chemin relatif du paquet. Notez qu'il se termine par un '/' pour le distinguer d'un nom de fichier. Tous les en-têtes qui suivent un en-tête Name, sans aucune ligne vierge intermédiaire, s'appliquent au fichier ou au paquet spécifié dans l'en-tête Name. Dans l'exemple ci-dessus, étant donné que l'en-tête Sealed se trouve après l'en-tête Name : myCompany/myPackage, sans lignes vides entre les deux, l'en-tête Sealed sera interprété comme s'appliquant (uniquement) au paquet myCompany/myPackage.

Versionnement des paquets : La spécification de versionnement des paquets définit plusieurs en-têtes de manifeste pour contenir les informations de versionnement. Un jeu de ces en-têtes peut être attribué à chaque paquet. Les en-têtes de versionnement doivent apparaître directement sous l'en-tête Name du paquet. Cet exemple montre tous les en-têtes de versionnement :

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."

Informations complémentaires : https://docs.oracle.com/javase/tutorial/deployment/jar/manifestindex.html

27voto

jordom Points 31

Manifest.MF contient des informations sur les fichiers contenus dans le fichier JAR.

Chaque fois qu'un fichier JAR est créé, un fichier manifest.mf par défaut est créé dans le dossier META-INF et il contient les entrées par défaut suivantes :

Manifest-Version: 1.0
Created-By: 1.7.0_06 (Oracle Corporation)

Ces entrées sont des paires "header:value". La première spécifie la version du manifeste et la seconde la version du JDK avec lequel le fichier JAR est créé.

En-tête de classe principale : Lorsqu'un fichier JAR est utilisé pour regrouper une application dans un paquet, nous devons spécifier la classe servant de point d'entrée à l'application. Nous fournissons cette information en utilisant l'en-tête 'Main-Class' du fichier manifest,

Classe principale : {nom de classe entièrement qualifié}

La valeur 'Main-Class' correspond à la classe ayant la méthode main. Après avoir spécifié cette entrée, nous pouvons exécuter le fichier JAR pour lancer l'application.

En-tête Class-Path : La plupart du temps, nous avons besoin d'accéder aux autres fichiers JAR à partir des classes empaquetées dans le fichier JAR de l'application. Pour ce faire, il suffit de fournir leurs chemins qualifiés dans le fichier manifeste à l'aide de l'en-tête "Class-Path",

Class-Path : {jar1-name jar2-name directory-name/jar3-name}

Cet en-tête peut être utilisé pour spécifier les fichiers JAR externes sur le même réseau local et non à l'intérieur du JAR courant.

En-têtes liés à la version du paquet : Lorsque le fichier JAR est utilisé pour le versionnement des paquets, les en-têtes suivants sont utilisés, comme spécifié par la spécification du langage 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.

En-têtes liés à l'étanchéité du paquet :

Nous pouvons également spécifier si un paquet particulier à l'intérieur d'un fichier JAR doit être scellé, ce qui signifie que toutes les classes définies dans ce paquet doivent être archivées dans le même fichier JAR. Ceci peut être spécifié à l'aide de l'en-tête "Sealed",

Nom : {package/some-package/} Scellé:true

Ici, le nom du paquet doit se terminer par '/'.

Renforcer la sécurité avec des fichiers manifestes :

Nous pouvons utiliser les entrées des fichiers manifestes pour assurer la sécurité de l'application web ou de l'applet qu'elle emballe avec les différents attributs comme 'Permissions', 'Codebae', 'Application-Name', 'Trusted-Only' et bien d'autres encore.

Dossier META-INF :

C'est dans ce dossier que se trouve le fichier du manifeste. Il peut également contenir d'autres fichiers contenant des métadonnées sur l'application. Par exemple, dans un fichier JAR de module EJB, ce dossier contient le descripteur de déploiement EJB pour le module EJB ainsi que le fichier manifeste pour le JAR. Il contient également le fichier xml contenant le mappage des références abstraites d'un EJB aux ressources concrètes du conteneur du serveur d'application sur lequel il sera exécuté.

Référence :
https://docs.oracle.com/javase/tutorial/deployment/jar/manifestindex.html

2voto

neetu Points 31

Voir comment ajouter un manifeste dans un fichier JAR en utilisant Java.

http://www.concretepage.com/java/add-manifest-into-jar-file-using-java

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X