Java SE vs JRE vs JDK : quelle est la différence ?
Les termes Java SE, JRE et JDK désignent trois choses distinctes souvent confondues. Voici ce que chacun couvre et quand l'utiliser.
Java SE — la spécification
Java Standard Edition est une spécification formelle décrivant le langage Java et une bibliothèque standard (collections, I/O, concurrent, réseau, etc.). Ce n'est pas un logiciel à installer — c'est le contrat qu'une JVM doit respecter.
D'autres éditions ont existé ou existent : Java ME (embarqué), Java EE (devenue Jakarta EE, serveurs d'applications). Java SE est la base.
JRE — l'environnement d'exécution
Java Runtime Environment est l'implémentation qui permet d'exécuter une application Java. Il contient :
- La JVM (machine virtuelle)
- Les bibliothèques standard (
java.util,java.io, etc.) - Les outils minimum pour lancer (
java)
Sans JRE, pas moyen d'exécuter un programme Java. C'est ce qu'on installait autrefois pour faire tourner une applet Java sur son navigateur.
JDK — le kit de développement
Java Development Kit contient tout le JRE + les outils pour développer :
javac— le compilateurjar,jmod,jlink— outils de packagingjshell— REPL interactivejdb— débogueurjavadoc— générateur de documentation
Si vous écrivez du code Java, vous avez besoin du JDK, pas d'un simple JRE.
Résumé visuel
┌─────────────────────────────────┐
│ JDK │
│ ┌──────────────────────────┐ │
│ │ JRE │ │
│ │ ┌────────────────────┐ │ │
│ │ │ JVM │ │ │
│ │ └────────────────────┘ │ │
│ │ Bibliothèques std │ │
│ └──────────────────────────┘ │
│ javac, jar, jshell, jdb │
└─────────────────────────────────┘
Et les numéros 6, 8, 11, 16, 17, 21 ?
Ce sont les numéros de version de la spécification Java SE. Exemples :
- Java SE 6 (2006) — très ancienne, encore en production dans certains systèmes bancaires.
- Java SE 8 (2014) — introduction des lambdas et de l'API Streams.
- Java SE 11 (2018) — première LTS de l'ère moderne.
- Java SE 16 (2021) — introduction des records (stable).
- Java SE 17 (2021) — LTS, largement adoptée en entreprise.
- Java SE 21 (2023) — LTS actuelle, virtual threads stables.
À chaque version de Java SE correspond une version de JRE et de JDK : JRE 8, JDK 11, JDK 21, etc. Un programme compilé avec un JDK 21 ciblant Java 21 ne fonctionnera pas sur un JRE 17.
La disparition du JRE autonome
Depuis Java 9, Oracle ne distribue plus de JRE public séparé. Les raisons :
- Le JRE gonflait avec des APIs rarement utilisées.
- Les applets Java ont disparu des navigateurs.
- Les conteneurs et images Docker embarquent leur propre runtime.
- L'outil
jlinkpermet de créer un runtime sur mesure contenant uniquement les modules nécessaires — souvent plus petit qu'un JRE classique.
Certaines distributions (BellSoft Liberica, Azul Zulu) proposent encore un JRE autonome. Sinon, installez un JDK — il fait tout ce que faisait un JRE, et un peu plus.
Que faut-il installer ?
| Usage | À installer |
|---|---|
| Écrire du code Java | JDK (toujours) |
| Exécuter une application empaquetée en JAR | JDK (ou un ancien JRE) |
| Lancer un conteneur Docker Java | Image eclipse-temurin — contient déjà un JDK |
| Runtime minimal sur mesure | Construire avec jlink |
En pratique aujourd'hui, vous n'avez qu'une seule décision à prendre : quelle version de JDK installer. Les autres termes relèvent du vocabulaire historique.
Quelques distributions de JDK populaires
- Eclipse Temurin (Fondation Eclipse) — successeur d'AdoptOpenJDK, gratuit et bien maintenu.
- Amazon Corretto — AWS, gratuit, avec support long.
- Azul Zulu — existe aussi en version JRE.
- Microsoft Build of OpenJDK — optimisé pour Azure.
- Oracle JDK — gratuit pour un usage limité, payant en production commerciale.
Toutes ces distributions respectent la spécification Java SE. Le code Java écrit sur l'une tourne identiquement sur les autres — c'est tout l'intérêt de la spécification.