J'ai remarqué que les fichiers JAR, WAR et EAR ont un MANIFEST.MF
fichier sous le META-INF
dossier.
A quoi sert le MANIFEST.MF
fichier? Que peut-on spécifier dans ce fichier?
J'ai remarqué que les fichiers JAR, WAR et EAR ont un MANIFEST.MF
fichier sous le META-INF
dossier.
A quoi sert le MANIFEST.MF
fichier? Que peut-on spécifier dans ce fichier?
Réponses:
Le contenu du fichier Manifest dans 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 sous forme de paires nom-valeur. Le nom d'un en-tête est séparé de sa valeur par deux points. Le manifeste par défaut montre 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 empaquetés dans l'archive. Les informations exactes sur le fichier enregistrées dans le manifeste dépendront de l'utilisation prévue du fichier JAR. Le fichier manifeste par défaut ne fait aucune hypothèse sur les informations qu'il doit enregistrer sur d'autres fichiers, de sorte que sa seule ligne ne contient que des données sur lui-même. En-têtes de manifeste à usage spécial
En fonction du rôle prévu du fichier JAR, le manifeste par défaut devra peut-être être modifié. Si le fichier JAR est créé uniquement à des fins d'archivage, le fichier MANIFEST.MF est inutile. La plupart des utilisations des fichiers JAR vont au-delà du simple archivage et de la compression et nécessitent des informations spéciales dans le fichier manifeste. Vous trouverez ci-dessous une brève description des en-têtes requis pour certaines fonctions de fichier JAR à usage spécial
Applications regroupées sous forme de fichiers JAR: si une application est regroupée dans un fichier JAR, la machine virtuelle Java doit être informée du point d'entrée de l'application. Un point d'entrée est n'importe quelle classe avec une méthode publique static void main (String [] args). Ces informations sont fournies dans l'en-tête Main-Class, qui a la forme générale:
Main-Class: classname
La valeur classname doit être remplacée par le point d'entrée de l'application.
Extensions de téléchargement: les extensions de téléchargement sont des fichiers JAR 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 aux fins de cette applet. Les extensions peuvent se référencer les unes les 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 dans les fichiers servlet.jar, infobus.jar et acme / beans.jar serviront d'extensions aux fins 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.
Scellement de package: un package dans un fichier JAR peut être éventuellement 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 assurer la cohérence des versions entre les classes de votre logiciel ou comme mesure de sécurité. Pour sceller un colis, un en-tête Nom doit être ajouté pour le colis, suivi d'un en-tête scellé, semblable à celui-ci:
Name: myCompany/myPackage/
Sealed: true
La valeur de l'en-tête Name est le chemin d'accès relatif du package. Notez qu'il se termine par un «/» pour le distinguer d'un nom de fichier. Tous les en-têtes suivant un en-tête Name, sans aucune ligne vide intermédiaire, s'appliquent au fichier ou package spécifié dans l'en-tête Name. Dans l'exemple ci-dessus, comme l'en-tête Sealed apparaît 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 package myCompany / myPackage.
Gestion des versions de package: la spécification de version de package définit plusieurs en-têtes de manifeste pour contenir les informations de version. Un ensemble de ces en-têtes peut être attribué à chaque package. Les en-têtes de contrôle de version doivent apparaître directement sous l'en-tête Name du package. Cet exemple montre tous les en-têtes de contrôle de version:
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."
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 comme ceci:
Manifest-Version: 1.0
Created-By: 1.7.0_06 (Oracle Corporation)
Ce sont des entrées sous forme de paires «en-tête: valeur». Le premier spécifie la version du manifeste et le second spécifie la version JDK avec laquelle le fichier JAR est créé.
En-tête Main-Class: Lorsqu'un fichier JAR est utilisé pour regrouper une application dans un package, nous devons spécifier la classe servant un point d'entrée de l'application. Nous fournissons ces informations en utilisant l'en-tête 'Main-Class' du fichier manifeste,
Classe principale: {nom de classe pleinement qualifié}
La valeur 'Main-Class' ici est la classe ayant la méthode main. Après avoir spécifié cette entrée, nous pouvons exécuter le fichier JAR pour exécuter l'application.
En-tête Class-Path: La plupart du temps, nous devons accéder aux autres fichiers JAR à partir des classes empaquetées dans le fichier JAR de l'application. Cela peut être fait en fournissant leurs chemins complets dans le fichier manifeste en utilisant l'en-tête 'Class-Path',
Chemin de classe: {nom-jar1 nom-jar2 nom-répertoire / nom-jar3}
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 actuel.
En-têtes liés à la version du package: lorsque le fichier JAR est utilisé pour la gestion des versions du package, 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 des packages particuliers à l'intérieur d'un fichier JAR doivent être scellés, ce qui signifie que toutes les classes définies dans ce package doivent être archivées dans le même fichier JAR. Cela peut être spécifié à l'aide de l'en-tête «scellé»,
Nom: {package / some-package /} Scellé: vrai
Ici, le nom du package doit se terminer par «/».
Amélioration de la sécurité avec les fichiers manifestes:
Nous pouvons utiliser des entrées de fichiers manifestes pour assurer la sécurité de l'application Web ou de l'applet qu'elle contient avec les différents attributs tels que «Permissions», «Codebae», «Application-Name», «Trusted-Only» et bien d'autres.
Dossier META-INF:
Ce dossier est l'emplacement du fichier manifeste. En outre, il peut contenir plus de 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 du JAR. En outre, il contient le fichier xml contenant le mappage d'une référence EJB abstraite aux ressources de conteneur concrètes du serveur d'applications sur lequel il sera exécuté.
Référence:
https://docs.oracle.com/javase/tutorial/deployment/jar/manifestindex.html