WAR / EAR (archive Java d'entreprise) : fichier .war
stableArchives de déploiement Jakarta EE (ex-Java EE) : le WAR empaquette une application web, l'EAR regroupe plusieurs modules déployés ensemble.
Le WAR et l’EAR sont des formats de déploiement de la plateforme Jakarta EE (rebaptisée ainsi en 2018, après avoir longtemps porté le nom Java EE sous l’égide de Sun Microsystems puis d’Oracle), tous deux structurellement des archives JAR (elles-mêmes des archives ZIP) organisées selon une convention de dossiers imposée par la spécification.
Un WAR (Web Application Archive) contient une application web complète : classes Java compilées, bibliothèques dépendantes dans un dossier WEB-INF/lib, pages JSP, ressources statiques, et un descripteur web.xml (facultatif depuis Servlet 3.0) qui déclare la structure de l’application (servlets, mappages d’URL, paramètres de session). Sa signature binaire est identique à celle de n’importe quel ZIP (PK\x03\x04) : seule la présence de ce dossier WEB-INF confirme sa nature réelle.
Un EAR (Enterprise Archive) va un cran plus loin dans l’assemblage : il regroupe plusieurs modules déployés ensemble comme une application d’entreprise unique (un ou plusieurs WAR pour la partie web, des JAR contenant de la logique métier partagée entre ces modules), le tout décrit par un descripteur application.xml qui indique comment ces pièces s’articulent entre elles.
Ni l’un ni l’autre ne s’exécute de façon autonome : les deux nécessitent un serveur d’applications compatible Jakarta EE (Apache Tomcat pour un simple conteneur de servlets, WildFly ou un serveur d’application complet pour un EAR utilisant l’ensemble des services de la plateforme) capable d’interpréter leur structure et d’y déployer le bytecode Java qu’ils contiennent.
Passage de javax.* à jakarta.* (Jakarta EE 9)
Jakarta EE 9 a renommé les paquets des API de la plateforme de javax.* en jakarta.* (par exemple javax.servlet devient jakarta.servlet). Un WAR compilé avec les API javax.* (Java EE 8 et versions antérieures) ne fonctionne donc pas tel quel sur un serveur Jakarta EE 9 ou ultérieur, comme Tomcat 10 : il faut le recompiler avec les nouvelles API ou le convertir. Tomcat 10 peut faire cette conversion au déploiement, pour les WAR placés dans le dossier webapps-javaee, à l’aide de l’outil Apache Tomcat migration tool for Jakarta EE.
L’essor des architectures en microservices et des conteneurs applicatifs comme Docker a réduit l’usage de l’EAR en particulier, de nombreuses équipes préférant aujourd’hui déployer chaque service comme une application autonome (souvent un simple JAR exécutable avec un serveur embarqué) plutôt que d’assembler plusieurs modules dans une archive d’entreprise monolithique.
Signature binaire
| Hexadécimal | Offset |
|---|---|
50 4B 03 04 | 0 |
Vérifier qu'un fichier porte bien cette signature →
Questions fréquentes
Comment ouvrir un fichier .war ?
Apache Tomcat, WildFly permettent d'ouvrir gratuitement un fichier .war. Voir la liste complète des logiciels compatibles ci-contre.
Quel est le type MIME du format WAR / EAR (archive Java d'entreprise) ?
Le type MIME du format WAR / EAR (archive Java d'entreprise) est application/java-archive.
Le format WAR / EAR (archive Java d'entreprise) (.war, .ear) est-il encore utilisé aujourd'hui ?
Oui, le format WAR / EAR (archive Java d'entreprise) est stable et toujours largement utilisé, sans signe de déclin.
Peut-on ouvrir un fichier .war sur mobile, sans installer d'application ?
Aucun outil web n'est référencé sur cette fiche pour ce format : l'ouverture nécessite un logiciel de bureau (voir la liste « Avec quoi l'ouvrir » ci-contre).
Quelle est la différence entre un WAR et un EAR ?
Le WAR (Web Application Archive) empaquette une seule application web complète (servlets, pages JSP, ressources statiques, description dans web.xml) destinée à un serveur d'applications. L'EAR (Enterprise Archive) va un cran plus loin : il regroupe plusieurs modules (un ou plusieurs WAR, des JAR contenant de la logique métier partagée) déployés ensemble comme une seule application d'entreprise cohérente.
Un serveur web classique comme Apache ou Nginx peut-il exécuter un WAR directement ?
Non : un WAR nécessite un serveur d'applications compatible Jakarta EE (Apache Tomcat, WildFly, ou un serveur d'application complet comme WebLogic) capable d'interpréter le bytecode Java et le descripteur web.xml qu'il contient. Un serveur web générique ne sait servir que des fichiers statiques, pas exécuter du code serveur Java packagé de cette façon.
Class, JAR, WAR, PYC, BEAM : le bytecode compilé selon l'écosystème (JVM, Python, Erlang/Elixir) →
Un fichier ne s'ouvre pas : les causes possibles →
Comment savoir si un fichier est corrompu →
Sources
- Jakarta EE : Packaging (documentation officielle)
- Wikipedia : WAR (file format)
- Apache Tomcat : Migration Guide, Tomcat 10.0.x
Dernière mise à jour :