Qu'est-ce que le format de fichier JAR ?
Les fichiers avec l'extension .jar sont des archives ZIP utilisées par la plateforme Java pour regrouper des fichiers .class compilés, des métadonnées et des ressources - telles que des images, des fichiers texte et des données de configuration - dans un seul paquet portable. Le format a été introduit avec le JDK 1.1 et reste l'unité de distribution principale pour les bibliothèques et applications Java.
Un fichier .jar peut fonctionner comme un exécutable autonome lorsque son fichier META-INF/MANIFEST.MF spécifie une entrée Main-Class. Lorsqu'il est lancé avec java -jar file.jar, la JVM lit cet attribut et démarre la classe désignée, permettant aux développeurs de livrer une application complète sous la forme d'un fichier unique qui s'exécute sur n'importe quel système disposant d'un environnement d'exécution compatible. Chaque entrée individuelle à l'intérieur de l'archive peut également être compressée indépendamment à l'aide de l'algorithme DEFLATE, ce qui réduit la taille du paquet tout en permettant un accès aléatoire rapide aux fichiers individuels.
Parmi les métadonnées qu'un .jar transporte, le fichier META-INF/MANIFEST.MF est le plus important : il définit comment le paquet est utilisé, liste les dépendances du classpath via Class-Path et peut contenir des attributs de sécurité. Les signatures numériques sont stockées sous forme de fichiers .SF et .DSA/.RSA séparés dans META-INF/, et non dans le manifeste lui-même. Java 9 a introduit deux fonctionnalités supplémentaires : les JAR multi-versions placent les remplacements de classes spécifiques à une version sous META-INF/versions/N/, et les JAR modulaires incluent un module-info.class à la racine de l'archive.
Pour parcourir ou extraire le contenu d'un fichier .jar, vous pouvez utiliser n'importe quel outil de décompression ZIP standard et effectuer les mêmes actions qu'avec une archive normale - le renommer en .zip fonctionne tout aussi bien. Vous pouvez également utiliser la commande jar incluse avec le JDK :
- Lister le contenu :
jar -tf file.jar - Extraire :
jar -xf file.jar - Exécuter (si exécutable) :
java -jar file.jar
Les formats d'archives côté serveur associés incluent les fichiers .war pour les applications web et les fichiers .ear pour les applications d'entreprise, tous deux basés sur la même structure ZIP.
Sécurité et sûreté
RISQUE : MEDIUMUn JAR exécutable est un véritable programme : avec Java installé, « java -jar » exécute tout code qu'il contient, avec les permissions de votre utilisateur - ainsi, un JAR inconnu peut transporter des logiciels malveillants (les RAT et chevaux de Troie Java sont une famille connue). Traitez un JAR téléchargé comme n'importe quel .exe : n'exécutez que ceux provenant d'une source de confiance et méfiez-vous des pièces jointes .jar non sollicitées. Inspecter simplement le fichier comme un ZIP (7-Zip) est sûr ; c'est l'exécution qui présente un risque. Un JAR peut être signé numériquement, mais une signature prouve seulement l'origine, pas la sécurité.
Détails du format
en brefProgrammes qui ouvrent les fichiers JAR
Détails techniques
spécifications approfondies| Format de conteneur | Archive ZIP - partage les octets magiques `PK` (`50 4B 03 04`) à l'offset 0 avec tous les fichiers ZIP standards |
| Type MIME | `application/java-archive` |
| Fichier interne requis | `META-INF/MANIFEST.MF` - doit être présent ; contrôle les métadonnées, le classpath et le comportement exécutable |
| Déclencheur de JAR exécutable | Attribut `Main-Class` dans `MANIFEST.MF` ; lancé avec `java -jar file.jar` |
| Format du bytecode | Fichiers `.class` compilés contenant du bytecode JVM - indépendant de la plateforme, pas du code machine natif |
| Compression par entrée | Algorithme DEFLATE (identique au ZIP) ; les entrées individuelles peuvent également être stockées sans compression pour un accès aléatoire plus rapide |
| Signatures numériques | Fichier de signature `.SF` associé à un fichier de clé `.DSA` ou `.RSA`, tous deux stockés dans `META-INF/` |
| Déclaration du classpath | L'attribut de manifeste `Class-Path` liste les JAR dépendants séparés par des espaces pour la résolution au moment de l'exécution |
| JAR multi-versions (MR-JAR) | Java 9+ ; remplacements de classes spécifiques à la version placés sous `META-INF/versions/N/` pour que les JVM plus récentes choisissent le bon bytecode |
| Descripteur de module (JPMS) | Un JAR modulaire inclut `module-info.class` à la racine de l'archive, activant le système de modules de Java 9+ |
| Scellement de paquet | `Sealed: true` dans le manifeste empêche d'autres JAR d'injecter des classes dans le même paquet au moment de l'exécution |
| Uber/Fat JAR | Variante de déploiement autonome qui intègre tous les JAR de dépendance ; nécessite un chargeur de classe personnalisé tel que Spring Boot Loader |
| Publié | 1996-1997 (JDK 1.1) |
| Standard ouvert | Oui · libre de droits |
| Spécification | docs.oracle.com |
Conversions JAR
Q&R de la communauté
posées par les utilisateursPas encore de questions - soyez le premier à poser une question sur les fichiers JAR.