Développons en Java v 2.40 Copyright (C) 1999-2023 Jean-Michel DOUDOUX. |
|||||||
Niveau : | Fondamental |
Java est un langage de programmation à usage général, évolué et orienté objet dont la syntaxe est proche du C. Ses caractéristiques ainsi que la richesse de son écosystème et de sa communauté lui ont permis d'être très largement utilisé pour le développement d'applications de types très disparates. Java est notamment largement utilisé pour le développement d'applications d'entreprises et mobiles.
Quelques chiffres et faits à propos de Java en 2011 :
En 2020, Java fête ses 25 ans.
Ce chapitre contient plusieurs sections :
Java possède un certain nombre de caractéristiques qui ont largement contribué à son énorme succès :
Java est interprété | le source est compilé en pseudo code ou bytecode puis exécuté par un interpréteur Java : la Java Virtual Machine (JVM). Ce concept est à la base du slogan de Sun pour Java : WORA (Write Once, Run Anywhere : écrire une fois, exécuter partout). En effet, le bytecode, s'il ne contient pas de code spécifique à une plate-forme particulière peut être exécuté et obtenir quasiment les mêmes résultats sur toutes les machines disposant d'une JVM. |
Java est portable : il est indépendant de toute plate-forme | il n'y a pas de compilation spécifique pour chaque plate forme. Le code reste indépendant de la machine sur laquelle il s'exécute. Il est possible d'exécuter des programmes Java sur tous les environnements qui possèdent une Java Virtual Machine. Cette indépendance est assurée au niveau du code source grâce à Unicode et au niveau du bytecode. |
Java est orienté objet. | comme la plupart des langages récents, Java est orienté objet. Chaque fichier source contient la définition d'une ou plusieurs classes qui sont utilisées les unes avec les autres pour former une application. Java n'est pas complètement objet car il définit des types primitifs (entier, caractère, flottant, booléen,...). |
Java est simple | le choix de ses auteurs a été d'abandonner des éléments mal compris ou mal exploités des autres langages tels que la notion de pointeurs (pour éviter les incidents en manipulant directement la mémoire), l'héritage multiple et la surcharge des opérateurs, ... |
Java est fortement typé | toutes les variables sont typées et il n'existe pas de conversion automatique qui risquerait une perte de données. Si une telle conversion doit être réalisée, le développeur doit obligatoirement utiliser un cast ou une méthode statique fournie en standard pour la réaliser. |
Java assure la gestion de la mémoire | l'allocation de la mémoire pour un objet est automatique à sa création et Java récupère automatiquement la mémoire inutilisée grâce au garbage collector qui restitue les zones de mémoire laissées libres suite à la destruction des objets. |
Java est sûr | la sécurité fait partie intégrante du système d'exécution et du compilateur. Un programme Java planté ne menace pas le système d'exploitation. Il ne peut pas y avoir d'accès direct à la mémoire. L'accès au disque
dur est réglementé dans une applet. Les applets fonctionnant sur le Web sont soumises aux restrictions suivantes dans la version 1.0 de Java :
|
Java est économe | le pseudo code a une taille relativement petite car les bibliothèques de classes requises ne sont liées qu'à l'exécution. |
Java est multitâche | il permet l'utilisation de threads qui sont des unités d'exécutions isolées. La JVM, elle même, utilise plusieurs threads. |
Il existe 2 types de programmes avec la version standard de Java : les applets et les applications. Une application autonome (stand alone program) est une application qui s'exécute sous le contrôle direct du système d'exploitation. Une applet est une application qui est chargée par un navigateur et qui est exécutée sous le contrôle d'un plug in de ce dernier.
Les principales différences entre une applet et une application sont :
Remarque : l'API Applet est deprecated en Java 9.
Java a connu deux logos au cours de son histoire.
de 1996 à 2003 |
à partir de 2003 |
Depuis sa première diffusion publique le 23 mai 1995, le langage et les plateformes Java ont été marqués par de nombreux événements dont les principaux sont :
Année | Evénements |
1995 | mai : premier lancement commercial du JDK 1.0 |
1996 | janvier : JDK 1.0.1 septembre : lancement du JDC |
1997 | Java Card 2.0 février : JDK 1.1 |
1998 | décembre : lancement de J2SE 1.2 et du JCP Personal Java 1.0 |
1999 | décembre : lancement J2EE 1.2 |
2000 | mai : J2SE 1.3 |
2001 | J2EE 1.3 |
2002 | février : J2SE 1.4 |
2003 | J2EE 1.4 |
2004 | septembre : J2SE 5.0 |
2005 | Lancement du programme Java Champion |
2006 | mai : Java EE 5 décembre : Java SE 6.0 |
2007 | Duke, la mascotte de Java est sous la licence Free BSD |
2008 | décembre : Java FX 1.0 |
2009 | février : JavaFX 1.1 |
2010 | janvier : rachat de Sun Microsystems par Oracle avril : JavaFX 1.3 |
2011 | juillet : Java SE 7 octobre : JavaFX 2.0 |
2012 | août : JavaFX 2.2 |
2013 | juin : Java EE 7 |
2014 | mars : Java SE 8, JavaFX 8 |
2017 | septembre Java SE 9, Java EE 8 |
2018 | mars : Java SE 10 septembre : Java SE 11 |
2019 | mars : Java SE 12 |
2020 | mars : Java SE 14 septembre : Java SE 15 décembre : Jakarta EE 9 |
2021 | mars : Java SE 16 mai : Jakarta EE 9.1 septembre : Java SE 17 |
2022 | mars : Java SE 18, Jakarta EE 10
septembre : Java SE 19 |
2023 | mars : Java SE 20 septembre : Java SE 21 |
Sun puis Oracle ont toujours fourni gratuitement un ensemble d'outils et d'API pour permettre le développement de programmes avec Java. Ce kit, nommé JDK, est librement téléchargeable sur le site web d'Oracle :
https://www.oracle.com/java/technologies/
Le JRE (Java Runtime Environment) contient uniquement l'environnement d'exécution de programmes Java. Le JDK contient lui-même le JRE. Le JRE seul doit être installé sur les machines où des applications Java doivent être exécutées.
Depuis sa version 1.2, Java a été renommé Java 2. Les numéros de version 1.2 et 2 désignent donc la même version. Le JDK a été renommé J2SDK (Java 2 Software Development Kit) mais la dénomination JDK reste encore largement utilisée, à tel point que la dénomination JDK est reprise dans la version 5.0. Le JRE a été renommé J2RE (Java 2 Runtime Environment).
Trois plate-formes d'exécution (ou éditions) Java sont définies pour des cibles distinctes selon les besoins des applications à développer :
La séparation en trois plate-formes permet au développeur de mieux cibler l'environnement d'exécution et de faire évoluer les plate-formes de façon plus indépendante.
Avec différentes éditions, les types d'applications qui peuvent être développées en Java sont nombreux et variés :
Sun fournit le JDK, à partir de la version 1.2, pour les plate-formes Windows, Solaris et Linux.
La version 1.3 de Java est désignée sous le nom Java 2 version 1.3.
La version 1.5 de Java est désignée officiellement sous le nom J2SE version 5.0.
La version 1.6 de Java est désignée officiellement sous le nom Java SE version 6.
La neuvième version de Java est numéroté Java 9 en remplacement du traditionnel 1.9.
La documentation au format HTML des API de Java est fournie séparément. Malgré sa taille, cette documentation est indispensable pour obtenir des informations complètes sur toutes les classes fournies. Le tableau ci-dessous résume la taille des différents composants selon leur version pour la plate-forme Windows.
Version | JDK Oracle | JRE Oracle | Documentation | |||
compressé | installé | compressé | installé | compressé | installé | |
1.0 | ||||||
1.1 | 8,6 Mo |
12 Mo |
16 Mo |
83 Mo |
||
1.2 | 20 Mo |
|||||
1.3 | 30 Mo |
53 Mo |
7 Mo |
35 Mo |
21 Mo |
106 Mo |
1.4 | 47 Mo |
59 Mo |
40 Mo |
30 Mo |
144 Mo |
|
5.0 | 44 Mo |
14 Mo |
43,5 Mo |
223 Mo |
||
6 | 73 Mo |
15,5 Mo |
56 Mo |
|||
7 | 140 Mo |
219 Mo |
42 Mo |
106 Mo |
263 Mo |
|
8 | 151 Mo |
365 Mo |
46 Mo |
136 Mo |
90 Mo |
345 Mo |
9 | 498 Mo |
214 Mo |
68 Mo |
393 Mo |
||
10 | 399 Mo |
461 Mo |
100 Mo |
226 Mo |
66 Mo |
378 Mo |
11 | 171 Mo |
278 Mo |
- |
- |
50 Mo |
290 Mo |
12 | 179 Mo |
307 Mo |
- |
- |
49 Mo |
264 Mo |
13 | 187 Mo |
304 Mo |
- |
- |
48 Mo |
266 Mo |
14 | 164 Mo |
50 Mo |
||||
15 | 179 Mo |
48 Mo |
||||
16 | 170 Mo |
49 Mo |
||||
17 | 173 Mo |
50 Mo |
||||
18 | 173 Mo |
50 Mo |
||||
19 | 186 Mo |
50 Mo |
||||
20 | 188 Mo |
50 Mo |
||||
21 | 191 Mo |
50 Mo |
Les technologies Java évoluent au travers du JCP (Java Community Process). Le JCP est une organisation communautaire ouverte qui utilise des processus établis pour définir ou réviser les spécifications des technologies Java.
Les membres du JCP sont des personnes individuelles ou des membres d'organisations communautaires ou de sociétés commerciales qui tendent à mettre en adéquation la technologie Java avec les besoins du marché.
Bien que le JCP soit une organisation communautaire ouverte, Oracle (depuis son rachat de Sun Microsystems) est le détenteur des marques déposées autour de la technologie Java et l'autorité suprême concernant les plates-formes Java.
Des membres du JCP qui souhaitent enrichir la plate-forme Java doivent faire une proposition formalisée sous la forme d'une JSR (Java Specification Request). Chaque JSR suit un processus qui définit son cycle de vie autour de plusieurs étapes clés : drafts, review et approval.
Chaque JSR est sous la responsabilité d'un leader et traitée par un groupe d'experts.
Il est possible de souscrire à la liste de diffusion du JCP à l'url : https://jcp.org/en/participation/mail
Cette liste de diffusion permet d'être informé sur les évolutions des JSR et des procédures du JCP et de participer à des revues publiques ou de fournir des commentaires.
Le site du JCP propose une liste des JSR par plates-formes ou technologies :
Une fois validée, chaque JSR doit proposer une spécification, une implémentation de référence (Reference Implementation) et un technology compatibility kit (TCK).
Chaque version de la plate-forme Java possède un numéro de version et un nom de projet.
A partir de la version 5, la plate-forme possède deux numéros de version :
A partir de la version 9, la plate-forme ne possède plus qu'un numéro correspondant au numéro majeure.
Le nom de projet des versions majeures fait fréquemment référence à des oiseaux ou des mammifères. Le nom de projet des versions mineures concerne des insectes.
Les versions majeures de Java SE supérieures à la version 8, n'ont plus de nom de code.
Version |
Nom du projet |
Date de diffusion |
JDK 1.0 |
Oak |
Mai 1995 |
JDK 1.1 |
Février 1997 |
|
JDK 1.1.4 |
Sparkler |
Septembre 1997 |
JDK 1.1.5 |
Pumpkin |
Décembre 1997 |
JDK 1.1.6 |
Abigail |
Avril 1998 |
JDK 1.1.7 |
Brutus |
Septembre 1998 |
JDK 1.1.8 |
Chelsea |
Avril 1999 |
J2SE 1.2 |
Playground |
Décembre 1998 |
J2SE 1.2.1 |
Mars 1999 |
|
J2SE 1.2.2 |
Cricket |
Juillet 1999 |
J2SE 1.3 |
Kestrel |
Mai 2000 |
J2SE 1.3.1 |
Ladybird |
Mai 2001 |
J2SE 1.4.0 |
Merlin |
Février 2002 |
J2SE 1.4.1 |
Hopper |
Septembre 2002 |
J2SE 1.4.2 |
Mantis |
Juin 2003 |
J2SE 5.0 (1.5) |
Tiger |
Septembre 2004 |
Java SE 6.0 (1.6) |
Mustang |
Décembre 2006 |
Java SE 7 (1.7) |
Dolphin |
Juillet 2011 |
Java SE 8 | Spider | Mars 2014 |
Java SE 9 | Septembre 2017 | |
Java SE 10 | Mars 2018 | |
Java SE 11 | Septembre 2018 | |
Java SE 12 | Mars 2019 | |
Java SE 13 | Septembre 2019 | |
Java SE 14 | Mars 2020 | |
Java SE 15 | Septembre 2020 | |
Java SE 16 | Mars 2021 | |
Java SE 17 | Septembre 2021 | |
Java SE 18 | Mars 2022 | |
Java SE 19 | Septembre 2022 | |
Java SE 20 | Mars 2023 | |
Java SE 21 | Septembre 2023 |
Le projet OpenJDK utilise le processus reposant sur des JDK Enhancement Proposals (JEPs) pour gérer le développement des fonctionnalités : proposer, discuter et spécifier de nouvelles fonctionnalités, améliorations ou modifications majeures à apporter à la plateforme Java.
Le processus des JEPs permet de faire évoluer la plateforme Java et de garantir que les nouvelles fonctionnalités répondent aux besoins grâce à une participation de la communauté Java.
La plupart des nouvelles fonctionnalités d'OpenJDK sont proposées sous la forme de JEPs. Une JEP peut concerner différentes fonctionnalités :
Les JEP sont aussi utilisées pour déprécier, améliorer ou retirer des fonctionnalités.
La JEP 0 contient une liste de toutes les JEPs : https://openjdk.org/jeps/0
La rédaction d'une JEP est un processus itératif qui peut faire évoluer le contenu du document en fonction des échanges et des retours. Son contenu peut être modifié tout au long du processus afin qu'une fois achevé, la JEP puisse servir de documentation officielle sur ce qui a été fait.
Les JEPs sont rédigées en Markdown.
Toutes les JEPs sont décrites dans un document qui respecte un modèle (template), défini dans la JEP 2. Certaines sections sont obligatoires (REQUIRED) ou optionnelles. L'ordre des sections doit être respecté. Il n'est pas possible d'ajouter des sections supplémentaires : seules celles définies dans le modèle peuvent être utilisées.
Les sections du modèle sont :
Chaque fonctionnalité importante du langage Java, de la JVM et de l'API Java SE commence par la rédaction d'une JEP qui passe par différentes phases de candidature et d'approbation avant d'être intégrée dans une version du JDK. Les travaux sur une JEP font évoluer son statut selon différents états.
Les trois premiers états d'une JEP sont :
Une JEP à l'état Candidate n'est qu'une proposition méritant d'être examinée : il n'y a aucun engagement à ce qu'elle soit livrée dans une version particulière d'OpenJDK. A l'état Candidate, la JEP reçoit un numéro distinct.
À partir de ce moment, une JEP passera le plus souvent par plusieurs états :
Une release, dans son ensemble, n'est considérée comme complète qu'une fois que toutes ses JEP relatives à des fonctionnalités ont atteint l'état Complete.
Il arrive parfois que le traitement d'une JEP soit interrompu entre l'état Draft et Closed/Delivered grâce à différents états :
Cette première version est lancée officiellement en mai 1995.
Elle se compose de 8 packages :
Cette version du JDK est annoncée officiellement en mars 1997. Elle apporte de nombreuses améliorations et d'importantes fonctionnalités nouvelles dont :
Cette version du JDK est lancée fin 1998. Elle apporte de nombreuses améliorations et d'importantes fonctionnalités nouvelles dont :
Java 2 se décline en 3 éditions différentes qui regroupent des APIs par domaine d'applications :
Le but de ces trois éditions est de proposer une solution reposant sur Java quelque soit le type de développement à réaliser.
Cette version du JDK est lancée en mai 2000. Elle apporte de nombreuses améliorations notamment sur les performances et des fonctionnalités nouvelles dont :
La rapidité d'exécution a été grandement améliorée dans cette version.
Cette version du JDK, lancée début 2002, est issue des travaux de la JSR 59. Elle apporte de nombreuses améliorations notamment sur les performances et des fonctionnalités nouvelles dont :
Cette version ajoute un nouveau mot clé au langage pour utiliser les assertions : assert.
La version 1.5 de J2SE est spécifiée par le JCP sous la JSR 176. Elle intègre un certain nombre de JSR dans le but de simplifier les développements en Java.
Ces évolutions sont réparties dans une quinzaine de JSR qui sont intégrées dans la version 1.5 de Java.
JSR-003 |
JMX Management API |
JSR-013 |
Decimal Arithmetic |
JSR-014 |
Generic Types |
JSR-028 |
SASL |
JSR-114 |
JDBC API Rowsets |
JSR-133 |
New Memory Model and thread |
JSR-163 |
Profiling API |
JSR-166 |
Concurrency Utilities |
JSR-174 |
Monitoring and Management for the JVM |
JSR-175 |
Metadata facility |
JSR-199 |
Compiler APIs |
JSR-200 |
Network Transfer Format for Java Archives |
JSR-201 |
Four Language Updates |
JSR-204 |
Unicode Surrogates |
JSR-206 |
JAXP 1.3 |
La version 1.5 de Java est désignée officiellement sous le nom J2SE version 5.0.
La version 1.5 de Java apporte de nombreuses évolutions qui peuvent être classées dans deux catégories :
Depuis sa première version et jusqu'à sa version 1.5, le langage Java lui-même n'a que très peu évolué : la version 1.1 a ajouté les classes internes et la version 1.4 les assertions.
Les évolutions de ces différentes versions concernaient donc essentiellement les API de la bibliothèque standard (core) de Java.
La version 1.5 peut être considérée comme une petite révolution pour Java car elle apporte énormément d'améliorations sur le langage :
Toutes ces évolutions sont déjà présentes dans différents autres langages notamment C#.
Le but principal de ces ajouts est de faciliter le développement d'applications avec Java en simplifiant l'écriture et la lecture du code.
La technologie Pack200 permet de compresser les fichiers .jar pour obtenir un réduction du volume pouvant atteindre 60%.
Cette version est spécifiée par le JCP sous la JSR 270 et développée sous le nom de code Mustang.
Elle intègre un changement de dénomination et de numérotation : la plate-forme J2SE est renommée en Java SE, SE signifiant toujours Standard Edition.
Cette version inclut plusieurs JSR :
JSR 105 |
XML Digital Signature APIs |
JSR 173 |
Streaming API for XML |
JSR 181 |
Web Services Metadata for Java Platform |
JSR 199 |
Java Compiler API |
JSR 202 |
Java Class File Specification Update |
JSR 221 |
JDBC 4.0 API Specification |
JSR 222 |
Java Architecture for XML Binding (JAXB) 2.0 |
JSR 223 |
Scripting for the Java Platform |
JSR 224 |
Java API for XML-Based Web Services (JAX-WS) 2.0 |
JSR 250 |
Common Annotations for the Java Platform |
JSR 269 |
Pluggable Annotation Processing API |
Elle apporte donc plusieurs améliorations :
L'amélioration du support XML
Java 6.0 s'est enrichie avec de nombreuses nouvelles fonctionnalités concernant XML :
JDBC 4.0
Cette nouvelle version de l'API JDBC est le fruit des travaux de la JSR 221. Elle apporte de nombreuses évolutions :
Le support des services web
Les services web font leur apparition dans la version SE de Java : précédemment ils n'étaient intégrés que dans la version EE. Plusieurs JSR sont ajoutés pour supporter les services web dans la plate-forme :
Le support des moteurs de scripts
L'API Scripting propose un standard pour l'utilisation d'outils de scripting. Cette API a été développée sous la JSR 223. La plate-forme intègre Rhino un moteur de scripting Javascript
L'amélioration de l'intégration dans le système d'exploitation sous-jacent
Les améliorations dans l'API Collection
L'améliorations dans l'API IO
Java Compiler API
Cette API est le résultat des travaux de la JSR 199 et a pour but de proposer une utilisation directe du compilateur Java. Cette API est utilisable à partir du package javax.tools
Pluggable Annotation-Processing API
Cette API est le résultat des travaux de la JSR 269 et permet un traitement des annotations à la compilation. Cette API est utilisable à partir du package javax.annotation.processing
Common Annotations
Cette API est le résultat des travaux de la JSR 250 et définit plusieurs nouvelles annotations standards.
@javax.annotation.Generated : permet de marquer une classe, une méthode ou un champ comme étant généré par un outil
@javax.annotation.PostConstruct : méthode exécutée après la fin de l'injection de dépendance
@javax.annotation.PreDestroy : méthode de type callback appelée juste avant d'être supprimée par le conteneur
@javax.annotation.Resource : permet de déclarer une référence vers une ressource
@javax.annotation.Resources : conteneur pour la déclaration de plusieurs ressources
Java Class File Specification
Issue des travaux de la JSR 202, cette spécification fait évoluer le format du fichier .class résultant de la compilation.
La vérification d'un fichier .class exécute un algorithme complexe et coûteux en ressources et en temps d'exécution pour valider un fichier .class.
La JSR 202, reprend une technique développée pour le profile CLDC de J2ME nommée split vérification qui décompose la vérification d'un fichier .class en deux étapes :
Le temps de chargement du fichier .class est ainsi réduit.
Le Framework JavaBeans Activation
Le Framework JavaBeans Activation a été intégré en standard dans la plate-forme Java SE 6. Ce framework historiquement fourni séparément permet de gérer les types mimes et était généralement utilisé avec l'API JavaMail. Ce framework permet d'associer des actions à des types mimes.
La liste des nouveaux packages de Java 6 comprend :
java.text.spi |
|
java.util.spi |
|
javax.activation |
Activation Framework |
javax.annotation |
Traitement des annotations |
javax.jws |
Support des services web |
javax.jws.soap |
support SOAP |
javax.lang.model.* |
|
javax.script |
Support des moteurs de scripting |
javax.tools |
Accès à certains outils notamment le compilateur |
javax.xml.bind.* |
JAXB |
javax.xml.crypto.* |
Cryptographie avec XML |
javax.xml.soap |
Support des messages SOAP |
javax.xml.stream.* |
API Stax |
javax.xml.ws.* |
API JAX-WS |
Une base de données nommée JavaDB est ajoutée au JDK 6.0 : c'est une version de la base de données Apache Derby.
En attendant la version 7, Sun puis Oracle ont proposé plusieurs mises à jour de la plate-forme Java SE. Ces mises à jour concernent :
Deux de ces mises à jour sont particulièrement importantes : update 10 et 14.
Java 6 update 1
Cette mise à jour contient des corrections de bugs.
La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/6u1.html
Java 6 update 2
Cette mise à jour contient des corrections de bugs et une nouvelle version de la base de données embarquée Java DB.
La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/6u2.html
Java 6 update 3
Cette mise à jour contient des corrections de bugs.
La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/javase-6u3.html
Java 6 update 4
Cette mise à jour contient des corrections de bugs et la version 10.3 de Java DB.
La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/javase-6u4.html
Java 6 update 5
Cette mise à jour contient des corrections de bugs et la possibilité d'enregistrer le JDK.
La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/javase-6u5.html
Depuis la version 6u5 de Java, le programme d'installation du JDK propose à la fin la possibilité d'enregistrer le JDK.
Il suffit de cliquer sur le bouton « Product Registration Information » pour obtenir des informations sur le processus d'enregistrement du produit.
Lors du clic sur le bouton « Finish », le processus d'enregistrement collecte les informations sur le JDK installé et sur le système hôte. Ces informations sont envoyées via une connexion http sécurisée sur le serveur Sun Connection.
Le navigateur s'ouvre sur la page d'enregistrement du JDK.
Il faut utiliser son compte SDN (Sun Developer Network) pour se logguer et afficher la page « Thank You ».
Il est possible d'enregistrer son JDK en ouvrant la page register.html située dans le répertoire d'installation du JDK.
En plus du JDK, plusieurs autres produits de Sun Connection peuvent être enregistrés comme GlassFish, Netbeans, ...
Sun Connection propose un service gratuit nommé Inventory Channel qui permet de gérer ses produits enregistrés.
Java 6 update 6
Cette mise à jour contient des corrections de bugs.
La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/javase-6u6.html
Java 6 update 7
Cette mise à jour contient des corrections de bugs et l'outil Java Visual VM.
La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/javase-6u7.html
Le numéro de version interne complet est build 1.6.0_07-b06. Le numéro de version externe est 6u7.
Exemple : |
C:\>java -version
java version "1.6.0_07"
Java(TM) SE Runtime Environment (build 1.6.0_07-b06)
Java HotSpot(TM) Client VM (build 10.0-b23, mixed mode, sharing)
Java 6 update 10
Cette mise à jour qui a porté le nom Java Update N ou Consumer JRE est très importante car elle apporte de grandes évolutions notamment pour le support des applications de type RIA.
Elle contient :
La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/javase-6u10.html
Le plug-in pour les navigateurs a été entièrement réécrit notamment pour permettre une meilleure exécution des applets, des applications Java Web Start et des applications RIA en Java FX.
Java 6 update 11
Cette mise à jour ne contient que des corrections de bugs et des patchs de sécurité.
La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/javase-6u11.html
La version externe est Java 6u11, le numéro de build est 1.6.0_11-b03.
Java 6 update 12
Cette mise à jour contient
La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/javase-6u12.html
La version externe est Java 6u12, le numéro de build est 1.6.0_12-b04.
Java 6 update 13
Cette mise à jour contient des corrections de bugs.
La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/javase-6u13.html
La version externe est Java 6u13, le numéro de build est 1.6.0_13-b03.
L'installeur propose par défaut l'installation de la barre d'outils de Yahoo.
Java 6 update 14
Cette mise à jour contient
La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/javase-6u14.html
La version externe est Java 6u14, le numéro de build est 1.6.0_14-b08.
Java 6 update 15
Cette mise à jour ne contient que des corrections de bugs et patchs de sécurité.
La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/javase-6u15.html
La version externe est Java 6u15, le numéro de build est 1.6.0_15-b03.
Java 6 update 16
Cette mise à jour ne contient que des corrections de bugs.
La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/javase-6u16.html
La version externe est Java 6u16, le numéro de build est 1.6.0_16-b01.
Java 6 update 17
Cette mise à jour ne contient que des corrections de bugs.
La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/javase-6u17.html
La version externe est Java 6u17, le numéro de build est 1.6.0_17-b04.
Java 6 update 18
Cette mise à jour propose le support de Windows 7, Ubuntu 8.04 et Red Hat Enterprise Linux 5.3
Elle inclut la version 1.2 de Visual VM, la version 10.5.3.0 de Java DB, la version 16.0 de la machine virtuelle HotSpot, une mise à jour de Java Web Start.
Cette mise à jour contient aussi des corrections de bugs et une amélioration des performances.
La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/javase-6u18.html
La version externe est Java 6u18, le numéro de build est 1.6.0_18-b07.
Java 6 update 19
Cette mise à jour ne contient que des corrections de bugs.
La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/javase-6u19.html
La version externe est Java 6u19, le numéro de build est 1.6.0_19-b04.
Java 6 update 20
Cette mise à jour ne contient que des corrections de bugs.
L'attribut codebase de JNLP est obligatoire.
La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/javase-6u20.html
La version externe est Java 6u20, le numéro de build est 1.6.0_20-b02.
Java 6 update 21
Cette mise à jour propose le support de Oracle Enterprise Linux 4.8, 5.4 et 5.5, Red Hat Enterprise Linux 5.5 et 5.4.
Elle inclut la version 1.2.2 de Visual VM et la version 17.0 de la machine virtuelle HotSpot.
La propriété Compagny Name est modifiée : "Sun Microsystem" est remplacé par "Oracle" dans la version 1.6.0_21_b6. Comme cette modification a posé des soucis pour le lancement d'Eclipse, la modification a été annulée dans la version 1.6.0_21_b7 pour Windows.
Cette mise à jour contient aussi des corrections de bugs.
La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/javase-6u21.html
La version externe est Java 6u21, le numéro de build est 1.6.0_21-b02.
Java 6 update 22
Cette mise à jour contient des corrections de bugs et patchs de sécurité.
La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/javase-6u22.html
La version externe est Java 6u22, le numéro de build est 1.6.0_22-b04.
Java 6 update 23
Cette mise à jour contient aussi des corrections de bugs.
Elle inclut la version 1.3.1 de Visual VM et la version 19.0 de la machine virtuelle HotSpot.
La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/javase-6u23.html
La version externe est Java 6u23, le numéro de build est 1.6.0_23-b05.
Java 6 update 24
Cette mise à jour contient des corrections de bugs, des patchs de sécurité, une amélioration des performances, la version 20 de la JVM HotSpot et le support pour les navigateurs IE9, Firefox 4 et Chrome 10.
La version 20 de la JVM Hotspot propose plusieurs améliorations :
l'option -XX:+TieredCompilation permet d'activer la tiered compilation dans le mode server
amélioration des informations de diagnostique
L'option -XX:+AggressiveOpts permet d'améliorer les performances de la classe BigDecimal
La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/javase-6u24.html
La version externe est Java 6u24, le numéro de build est 1.6.0_24-b07.
Java 6 update 25
Cette mise à jour contient des corrections de bugs et patchs de sécurité. L'outil Java DB est mis à jour en version 10.6.2.1.
La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/javase-6u25.html
La version externe est Java 6u25, le numéro de build est 1.6.0_25-b06.
Java 6 update 26
Cette mise à jour contient des corrections de bugs et patchs de sécurité. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/javase-6u26.html
La version externe est Java 6u26, le numéro de build est 1.6.0_26-b03.
Java 6 update 27
Cette mise à jour contient des corrections de bugs : cette version est certifiée pour une utilisation avec Firefox 5, Oracle Linux 5.6 et Red Hat Enterprise Linux 6.0.
La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/javase-6u27.html
La version externe est Java 6u27, le numéro de build est 1.6.0_27-b07.
La version Java 6 update 28 n'a jamais été publiée.
Java 6 update 29
Cette mise à jour contient des corrections de bugs et patchs de sécurité. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/javase-6u29.html
La version externe est Java 6u29, le numéro de build est 1.6.0_29-b11.
Java 6 update 30
Cette mise à jour contient des corrections de bugs. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/javase-6u30.html
Elle inclut le support pour Red Hat Enterprise Linux 6, la version 1.3.2 de Visual VM et l'implémentation du synthetizer open source Gervill, fournie aussi dans Java 7 qui est activable en utilisant l'option -Dsun.sound.useNewAudioEngine=true.
La version externe est Java 6u30, le numéro de build est 1.6.0_30-b12.
Java 6 update 31
Cette mise à jour contient 14 patchs de sécurité. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/javase-6u31.html
La version externe est Java 6u31, le numéro de build est 1.6.0_31-b4.
Java 6 update 32
Cette mise à jour contient des corrections de bugs. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/javase-6u32.html
La version externe est Java 6u32, le numéro de build est 1.6.0_32-b05.
Java 6 update 33
Cette mise à jour contient des corrections de bugs et des patches de sécurité. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/javase-6u33.html
La version externe est Java 6u33, le numéro de build est 1.6.0_33-b04.
Java 6 update 34
Cette mise à jour contient des corrections de bugs. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/javase-6u34.html
La version externe est Java 6u34, le numéro de build est 1.6.0_34-b04.
Java 6 update 35
Cette mise à jour contient un patch de sécurité critique (Oracle Security Alert CVE-2012-4686). La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/javase-6u35.html
La version externe est Java 6u35, le numéro de build est 1.6.0_35-b10.
Java 6 update 37
Cette mise à jour contient des patches de sécurité. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/javase-6u37.html
La version externe est Java 6u37, le numéro de build est 1.6.0_37-b06.
Java 6 update 38
Cette mise à jour contient des corrections de bugs. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/javase-6u38.html
La version externe est Java 6u38, le numéro de build est 1.6.0_38-b05.
Java 6 update 39
Cette mise à jour contient des patches de sécurité. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/javase-6u39.html
La version externe est Java 6u39, le numéro de build est 1.6.0_39-b04.
Java 6 update 41
Cette mise à jour contient des patches de sécurité. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/javase-6u41.html
La version externe est Java 6u41, le numéro de build est 1.6.0_41-b02.
Java 6 update 43
Cette mise à jour contient des patches de sécurité. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/javase-6u43.html
Cette version est certifiée pour une utilisation avec Windows Server 2012 (64-bit). Cette mise à jour a été annoncée comme étant la dernière diffusée gratuitement : le support est toujours possible en souscrivant au programme payant Java SE Support d'Oracle.
La version externe est Java 6u43, le numéro de build est 1.6.0_43-b01.
Java 6 update 45
Cette mise à jour contient des patches de sécurité. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/javase-6u45.html
La valeur par défaut de la propriété java.rmi.server.useCodebaseOnly depuis cette version est à true.
Sous Windows, la manière d'analyser la commande fournie en paramètre à la méthode exec() de la classe Runtime a été modifiée notamment si le chemin contient un espace.
La version externe est Java 6u45, le numéro de build est 1.6.0_45-b06. Elle est diffusée le 16 avril 2013.
Les mises à jour suivantes ne sont pas diffusées publiquement mais uniquement grâce au programme de support payant de Java SE.
Java SE 7 est issu des travaux commencés par Sun et poursuivis par Oracle, des travaux du JCP et des travaux d'implémentation du projet open source OpenJDK.
La version 7 de Java est une version évolutive qui propose quelques fonctionnalités intéressantes mais surtout c'est une version qui réouvre la voie aux évolutions du langage et de la plate-forme Java après plus de quatre années d'attente depuis la version 6.
Java SE 7 propose des évolutions sur toute la plate-forme :
Java SE 7 assure une forte compatibilité ascendante avec les versions antérieures de la plate-forme car les nouvelles fonctionnalités sont des ajouts. Ceci permet de préserver les compétences des développeurs et les investissements qui ont pu être faits dans la technologie Java.
Il y a cependant quelques petites contraintes dont il faut tenir compte lors d'une migration. Celles-ci sont consultables à l'url :
https://www.oracle.com/java/technologies/compatibility.html
Lors de sa sortie, Java SE 7 est déjà utilisable avec les principaux IDE du marché : Netbeans 7.0, Eclipse Indigo (avec un plug-in dédié en attendant son inclusion par défaut dans l'outil à partir de la version 7.0.1) et Intellij IDEA 10.5.
Java SE 7 est la première version majeure diffusée depuis le rachat de Sun par Oracle.
La base de Java SE 7 est le projet open source OpenJDK : c'est la première fois qu'une version de Java SE repose majoritairement sur une implémentation open source et des contributions externes comme le framework fork/join.
Avant la création du projet Open JDK, certaines fonctionnalités de la plate-forme Java étaient des implémentations propriétaires voire commerciales notamment le système de rendu des polices, le système de gestion des sons, certains algorithmes d'encryptage, ... toutes ces implémentations ont dû être remplacées par des solutions open source qui soient compatibles avec la licence GPL.
Ainsi, Java SE 7 utilise un nouveau synthétiseur MIDI open source en remplacement du synthétiseur propriétaire existant : le Gervill Software Synthesizer. Ce nouveau système est beaucoup plus performant que son prédécesseur.
Java SE version 7 a été spécifié par le JCP sous la JSR 336. Cette version se focalise sur quatre thèmes :
Java SE 7 intègre plusieurs spécifications :
Java SE 7 intègre aussi plusieurs améliorations et évolutions :
Oracle a commencé une fusion de ses JVM JRockit et HotSpot : la JVM de Java 7 possède la première version de cette fusion. Les prochaines mises à jour de Java 7 devraient fournir le travail de cette fusion : parvenir à la suppression de la PermGen et contenir certaines fonctionnalités de JRockit.
Plusieurs fonctionnalités initialement prévues pour Java SE 7 sont reportées dans Java SE 8 :
La sortie de Java SE 7 a eu lieu de 28 juillet 2011.
Lors de cette sortie, Java 7 contient un bug dans les optimisations faites par le compilateur Hotspot qui compile de façon erronée certaines boucles. Ce bug peut se traduire par un plantage de la JVM ou des résultats erronés ce qui est plus grave encore. Certains projets open source notamment Lucene et Solr sont affectés par ce bug.
Une solution de contournement de ce bug est de désactiver l'optimisation des boucles en utilisant l'option -XX:-UseLoopPredicate de la JVM.
Ce bug peut aussi survenir avec Java SE 6 dans une JVM Sun où les options -XX:+OptimizeStringConcat ou -XX:+AggressiveOpts sont utilisées.
Cette version inclut plusieurs JSR :
JSR 166y |
Fork / Join |
JSR 203 |
NIO 2 |
JSR 292 |
Invoke dynamic |
JSR 334 |
Project Coin |
Elle apporte donc plusieurs améliorations :
Le projet Coin
Java 7.0 propose quelques évolutions syntaxiques. Le projet Coin propose des améliorations au langage Java pour augmenter la productivité des développeurs et simplifier certaines tâches de programmation courantes. Il s'agit d'une part de réduire la quantité de code nécessaire et d'autre part de rendre ce code plus facile à lire en utilisant une syntaxe plus claire.
Le projet Coin a été développé par le JCP sous la JSR 334: "Small Enhancements to the Java Programming Language".
Le projet Coin a été développé et implémenté dans le cadre de l'open JDK, tout d'abord sous la forme d'un appel à contribution d'idées de la part de la communauté. Toutes les idées retenues ne sont pas proposées dans Java SE 7, certaines seront implémentées dans Java SE 8. Une première partie du projet Coin est incluse dans Java SE 7 l'autre partie sera intégrée dans Java SE 8.
Les fonctionnalités du projet Coin incluses dans Java 7 peuvent être regroupées en trois parties :
1) Simplifier l'utilisation des generics
2) Simplifier la gestion des erreurs
3) Simplifier l'écriture du code
Le but du projet Coin est de proposer quelques améliorations au niveau du langage Java :
Exemple ( code Java 7 ) : |
int valeurInt = 0b1000;
Exemple ( code Java 7 ) : |
int maValeur = 123_1456_789;
NIO 2
Cette nouvelle version de l'API NIO apporte de nombreuses fonctionnalités :
Invoke dynamic
Développé dans le projet Da Vinci, Invoke dynamic a pour but de faciliter l'exécution de code issu de langages dynamiques dans la JVM : pour cela un nouvel opérateur (invokedynamic) a été ajouté dans le bytecode et une nouvelle API permet d'utiliser le chargement d'une classe avec un AnonymousClassLoader et une nouvelle manière d'invoquer dynamiquement une méthode,
Fork / Join
Ce framework facilite la parallélisation de tâches en exploitant les capacités multi-processeurs des machines. Le principe est de diviser les traitements en tâches (fork), exécutées en parallèle et éventuellement de nouveau les diviser, puis d'agréger les résultats (join).
Oracle a proposé plusieurs mises à jour de la plate-forme Java SE 7. Ces mises à jour concernent :
Oracle applique à Java sa politique Critical Patch Updates (CPU) comme mécanisme primaire de diffusion des patches de sécurité : les dates de diffusion de ces CPU sont prédéfinies à une fréquence de quatre par an qui correspondent au mardi le plus proches du 17 des mois de janvier, avril, juillet et octobre. Des patches de sécurités peuvent être diffusés en dehors de ces dates notamment s'ils concernent des Security Alerts.
Java 7 update 1 CPU
Cette mise à jour contient une vingtaine de patchs de sécurité et quelques corrections de bugs. Il contient notamment un correctif dans le compilateur JIT de HotSpot qui provoque une erreur de l'optimisation de certaines boucles.
La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/7u1-relnotes.html
La liste des patches de sécurité est consultable à l'url :
https://www.oracle.com/security-alerts/javacpuoct2011.html
La version externe est Java 7u1, le numéro de build est 1.7.0_1-b08. Elle est diffusée le 18 octobre 2011.
Cette version inclut la version 1.7R3 du moteur JavaScript Rhino de la fondation Mozilla.
Java 7 update 2
Cette mise à jour contient des corrections de bugs.
La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/7u2-relnotes.html
La version externe est Java 7u2, le numéro de build est 1.7.0_2-b13. Elle est diffusée le 12 décembre 2011.
Cette version inclut :
Les démos et les exemples ne sont plus fournis avec le JDK mais sont fournis séparément.
Java 7 update 3 CPU
Cette mise à jour contient des patchs de sécurité. La liste complète est consultable à l'url :
https://www.oracle.com/java/technologies/javase/7u3-relnotes.html
La version externe est Java 7u3, le numéro de build est 1.7.0_3-b4. Elle est diffusée le 14 février 2012.
Java 7 update 4
Cette mise à jour contient des corrections de bugs.
La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/7u4-relnotes.html
La version externe est Java 7u4, le numéro de build est 1.7.0_4-b20. Elle est diffusée le 26 avril 2012.
Cette version inclut :
Java 7u4 propose une version 64 bits du JDK pour Mac OS X version Lion ou ultérieure.
La version 23 de la JVM HotSpot contient une partie des travaux de convergence avec la JVM JRockit.
Le ramasse-miettes G1 (Garbage First) est supporté : il est particulièrement adapté pour les JVM utilisant un gros heap.
Java 7 update 5 CPU
Cette mise à jour contient des corrections de bugs et des patches de sécurité.
La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/7u5-relnotes.html
La version externe est Java 7u5, le numéro de build est 1.7.0_5-b06. Elle est diffusée le 12 juin 2012.
Java 7 update 6
Cette mise à jour contient des corrections de bugs.
La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/7u6-relnotes.html
La version externe est Java 7u6, le numéro de build est 1.7.0_6-b24. Elle est diffusée le 14 aout 2012.
Cette version inclut :
Java 7 update 7
Cette mise à jour contient des patches de sécurité critiques (Oracle Security Alert CVE-2012-4681).
La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/7u7-relnotes.html
La version externe est Java 7u7, le numéro de build est 1.7.0_7-b10 (1.7.0_7-b11 pour Windows). Elle est diffusée le 30 aout 2012.
Java 7 update 9 CPU
Cette mise à jour contient des corrections de bugs et des patches de sécurité.
La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/7u9-relnotes.html
La version externe est Java 7u9, le numéro de build est 1.7.0_9-b05. Elle est diffusée le 16 octobre 2012.
Java 7 update 10
Cette mise à jour contient des corrections de bugs et des améliorations de sécurité.
La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/7u10-relnotes.html
La version externe est Java 7u10, le numéro de build est 1.7.0_10-b18. Elle est diffusée le 11 décembre 2012.
Cette version ajoute MAC OS X 10.8, Windows Server 2012 (64 bits) et Windows 8 Desktop à la liste des plate-formes certifiées.
Java 7 update 11 CPU
Cette mise à jour contient des patchs de sécurité critiques (Oracle Security Alert CVE-2013-0422).
La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/7u11-relnotes.html
La version externe est Java 7u11, le numéro de build est 1.7.0_11-b21. Elle est diffusée le 13 janvier 2013.
Java 7 update 13 CPU
Cette mise à jour contient des patches de sécurité. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/7u13-relnotes.html
La version externe est Java 7u13, le numéro de build est 1.7.0_43-b20. Elle est diffusée le 1er février 2013.
Java 7 update 15 CPU
Cette mise à jour contient des patches de sécurité. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/7u15-relnotes.html
Attention : comme Java 6 a atteint sa fin de vie et qu'Oracle ne fournira plus d'update publique gratuit pour Java 6, cette mise à jour désinstalle automatiquement Java 6.
La version externe est Java 7u15, le numéro de build est 1.7.0_15-b03. Elle est diffusée le 19 février 2013.
Java 7 update 17
Cette mise à jour contient des patches de sécurité critiques (Oracle Security Alert CVE-2013-1493). La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/7u17-relnotes.html
La version externe est Java 7u17, le numéro de build est 1.7.0_17-b02. Elle est diffusée le 4 mars 2013.
Java 7 update 21 CPU
Cette mise à jour contient des patches de sécurité. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/7u21-relnotes.html
La configuration de la sécurité du panneau de control Java a été modifiée : les niveaux low et custom ont été retirés.
Il est recommandé de signer toutes les applications : les applications non signées ou self-signed pourraient ne plus être supportées dans les prochaines mises à jour du JDK.
Une boîte de dialogue fournissant des informations de sécurités est affichée à l'utilisateur avant l'exécution d'une application qui utilise des composants signés et non signés.
Cette version du JDK est disponible pour Linux sur microprocesseur ARM (v6 et v7) avec certaines fonctionnalités qui ne sont pas supportées : Java WebStart, Java Plug-In, le ramasse-miettes Garbage First (G1), JavaFX SDK et Runtime. Le support de Java sur ARM ne concerne que GNOME Desktop Environment version 1:2.30+7.
La valeur par défaut de la propriété java.rmi.server.useCodebaseOnly depuis cette version est à true.
Sous Windows, la manière d'analyser la commande fournie en paramètre à la méthode exec() de la classe Runtime a été modifiée notamment si le chemin contient un espace.
La version externe est Java 7u21, le numéro de build est 1.7.0_21-b11 (1.7.0_21-b12 pour Mac OS X). Elle est diffusée le 16 avril 2013.
Java 7 update 25 CPU
Cette mise à jour contient des patches de sécurité. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/7u25-relnotes.html
La version externe est Java 7u25, le numéro de build est 1.7.0_25-b15 (1.7.0_25-b17 pour Windows). Elle est diffusée le 18 juin 2013.
Java 7 update 40
Cette mise à jour contient des améliorations relatives à la sécurité, le support de l'affichage Retina sur Mac OS X et des corrections de bugs. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/7u40-relnotes.html
La version externe est Java 7u40, le numéro de build est 1.7.0_40-b43. Elle est diffusée le 10 septembre 2013.
L'outil Java Mission Control (JMC) est fourni avec le JDK.
La version 2.2.40 de JavaFX est incluse avec cette version.
Java 7 update 45 CPU
Cette mise à jour contient des améliorations relatives à la sécurité et des corrections de 51 bugs. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/7u45-relnotes.html
La version externe est Java 7u45, le numéro de build est 1.7.0_45-b18. Elle est diffusée le 15 octobre 2013.
La version 2.2.51 de JavaFX est incluse avec cette version.
Cette version est disponible pour Linux ARM.
Java 7 update 51
Cette mise à jour contient des améliorations relatives à la sécurité et des corrections de 36 bugs. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/7u51-relnotes.html
La version externe est Java 7u51, le numéro de build est 1.7.0_51-b13. Elle est diffusée le 11 janvier 2014.
La version 2.2.45 de JavaFX est incluse avec cette version.
Java 7 update 55 CPU
Cette mise à jour contient des améliorations relatives à la sécurité et des corrections de 37 bugs. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/7u55-relnotes.html
La version externe est Java 7u55, le numéro de build est 1.7.0_55-b13. Elle est diffusée le 15 avril 2014.
Il est possible de désactiver l'installation d'outils tiers sponsorisés lors de l'installation de Java 32bits sous Windows en utilisant l'option SPONSORS=0 dans la ligne de commande.
Exemple : |
c:\>jre-7u55-windows-i586-iftw.exe SPONSORS=0
Cette désactivation sera maintenue lors des mises à jour suivantes.
La version 2.2.55 de JavaFX est incluse avec cette version.
Java 7 update 60
Cette mise à jour contient des améliorations et des corrections de 130 bugs. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/7u60-relnotes.html
La version externe est Java 7u60, le numéro de build est 1.7.0_60-b19. Elle est diffusée le 28 mai 2014.
La version 2.2.60 de JavaFX et 5.3 de Java Mission Control sont incluses avec cette version.
Java 7 update 65
Cette mise à jour contient des améliorations et des corrections de 18 bugs. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/7u65-relnotes.html
La version externe est Java 7u65, le numéro de build est 1.7.0_65-b20. Elle est diffusée le 15 juillet 2014.
La version 2.2.65 de JavaFX est incluse avec cette version.
Il est possible de désactiver l'installation d'outils tiers sponsorisés lors de l'installation via le panneau de configuration Java (Java Control Panel).
Java 7 update 67
Cette mise à jour contient des améliorations et des corrections de bugs. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/7u67-relnotes.html
La version externe est Java 7u67, le numéro de build est 1.7.0_67-b01. Elle est diffusée le 4 août 2014.
La version 2.2.67 de JavaFX est incluse avec cette version.
Java 7 update 71 CPU
Cette mise à jour contient des améliorations relatives à la sécurité et des corrections de 16 bugs. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/7u71-relnotes.html
La version externe est Java 7u71, le numéro de build est 1.7.0_71-b14. Elle est diffusée le 14 octobre 2014.
La version 2.2.71 de JavaFX est incluse avec cette version.
Oracle recommande de désactiver le support du protocole SSL V3 à cause de la faille SSL V3.0 "Poodle" Vulnerability - CVE-2014-3566.
Java 7 update 72
Cette mise à jour contient des améliorations relatives à la sécurité et des corrections de 36 bugs. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/7u72-relnotes.html
La version externe est Java 7u71, le numéro de build est 1.7.0_72-b14. Elle est diffusée le 14 octobre 2014.
La version 2.2.72 de JavaFX est incluse avec cette version.
Java 7 update 75 CPU
Cette mise à jour contient des améliorations relatives à la sécurité et des corrections de 12 bugs. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/7u75-relnotes.html
La version externe est Java 7u75, le numéro de build est 1.7.0_75-b13. Elle est diffusée le 19 janvier 2015.
La version 2.2.75 de JavaFX est incluse avec cette version.
Le protocole SSL V3 est désactivé par défaut et il est supprimé du panneau de contrôle.
Java 7 update 76 CPU
Cette mise à jour contient des améliorations relatives à la sécurité et des corrections de 96 bugs. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/7u76-relnotes.html
La version externe est Java 7u76, le numéro de build est 1.7.0_76-b13. Elle est diffusée le 19 janvier 2015.
La version 2.2.76 de JavaFX est incluse avec cette version.
Java 7 update 79 CPU
Cette mise à jour contient des améliorations relatives à la sécurité et des corrections de 21 bugs. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/7u79-relnotes.html
La version externe est Java 7u79, le numéro de build est 1.7.0_79-b15. Elle est diffusée le 14 avril 2015.
La version 2.2.79 de JavaFX est incluse avec cette version.
Java 7 update 80 CPU
Cette mise à jour contient des améliorations relatives à la sécurité et des corrections de bugs. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/7u80-relnotes.html
La version externe est Java 7u80, le numéro de build est 1.7.0_80-b15. Elle est diffusée le 14 avril 2015.
La version 2.2.80 de JavaFX est incluse avec cette version.
Les mises à jour suivantes ne sont pas diffusées publiquement mais uniquement grâce au programme de support payant de Java SE.
Java SE 8 est issu des travaux d'Oracle, du JCP et des travaux d'implémentation du projet open source OpenJDK.
Les spécifications de Java SE 8 sont définit dans la JSR 337.
Java SE 8 a été diffusé le 18 mars 2014.
Les travaux de développement du JDK sur les fonctionnalités de l'implémentation de référence sont organisés en JEP (Java Enhancement Proposals).
Une cinquantaine de JEP ont été incluses dans Java 8 notamment :
Les principales API ajoutées sont :
Les spécifications de certaines API ont été modifiées dans une Maintenance Release dédiée :
Les expressions Lambda permettent de mettre en oeuvre une forme de programmation fonctionnelle. Une expression Lambda permet de passer les traitements contenus dans l'expression en paramètre d'une méthode.
L'API Stream, contenue dans le package java.util.stream, permet de mettre en oeuvre des opérations fonctionnelles sur un flux d'éléments. Les éléments traités par un Stream ont pour origine une source. Une source contient (par exemple une collection ou un tableau) ou génère (par exemple un générateur de nombres aléatoires ou de valeurs incrémentées) les éléments à traiter.
Les traitements sont composés d'une aggrégation d'opérations. Les opérations proposées par l'API permettent de réaliser différentes actions sur les données à traiter. Généralement ces opérations attendent en paramètre une interface fonctionnelle qu'il est possible d'exprimer avec une expression Lambda ou une référence de méthode.
L'API Stream propose plusieurs opérations qui sont regroupées sous la forme d'un pipeline :
Dans ce pipeline, les éléments en sortie d'une opération sont utilisés en entrée de l'opération suivante.
Les opérations intermédiaires sont toutes lazy : elles n'exécutent aucun traitement tant que l'opération terminale n'est pas invoquée. Une opération intermédiaire renvoie toujours un nouveau Stream qui contient les éléments à traiter par l'opération suivante. Elle ne doit pas nécessairement traiter tous ses éléments d'entrée avant de produire un ou des éléments de sortie consommable par l'opération suivante.
Une opération intermédiaire peut être :
Les opérations terminales permettent de produire un résultat ou éventuellement des effets de bord à partir des éléments qui lui sont fournis. Un effet de bords résulte de l'exécution d'un bloc de code. Généralement les effets de bords ne sont pas recommandés car ils peuvent engendrer des problèmes hazardeux notamment lors de l'utilisation en concurrence. Il est cependant possible que ces effets de bord consistent simplement à afficher des messages dans la console ou les logs pour déboguer.
Un Stream peut facilement exécuter ses traitement de manière séquentielle ou parallèle. En parallèle, la gestion des éventuels accès concurrents sont cependant à la charge du développeur.
Plusieurs améliorations ont été apportées au langage :
Plusieurs améliorations ont été apportées à certaines API :
La version 4.2 de JDBC propose quelques fonctionnalités nouvelles et la suppression du pont JDBC-ODBC.
Plusieurs amélioration relatives à la sécurité ont été apportées notamment :
Plusieurs fonctionnalités ont été ajoutées pour faciliter la gestion de la concurrence :
Plusieurs évolutions ont été apportées à la machine virtuelle HotSpot :
Le JDK 8 inclut la version 5.3 de Java Mission Control et la version 10.10 de Java DB.
Plusieurs outils ont été ajoutés ou modifiés :
Initialement, Java 8 devait proposer un système de gestion des modules qui permettant de modulariser la plate-forme Java elle-même. Cependant cette fonctionnalité a été reportée à la prochaine version de Java. Pour permettre la future modularisation de la plate-forme, certaines méthodes ont été déclarées deprecated à cause de leurs dépendances. Elles devraient être supprimée dans la prochaine version de Java.
En attendant, pour permettre de déployer Java sur certaines plate-formes, Java 8 introduit le concept de Java SE Profile qui est un sous-ensemble des API de la plate-forme Java SE.
Le but des profiles est de permettre de préparer la migration des applications écrites en utilisant le CDC de Java ME vers un profile de Java SE. La puissance des appareils mobiles augmentant, permet de préparer la convergence du CDC vers Java SE.
Un profile respecte plusieurs contraintes :
L'intégralité des API de la plate-forme Java SE n'est pas considérée comme un profile.
Les Compact Profiles définissent des sous-ensembles de la plate-forme Java qui permettent d'exécuter sur des appareils possédant des ressources limitées des applications ne requérant pas toutes les fonctionnalités.
Trois profiles sont définis par les spécifications pour la plate-forme Java SE :
Ils ne concernent que les API utilisables mais ne concernent pas la JVM ou les outils.
Chaque profil contient les API des profils de numéro inférieur : par exemple, compact2 est un sur-ensemble de compact1 et l'API complète de Java SE est un sur-ensemble du profil de compact3. Le tableau suivant présente la composition des API de chaque ensemble :
Toutes les API |
Beans |
JNI |
JAX-WS |
Preferences |
Accessibility |
IDL |
|
RMI-IIOP |
CORBA |
Print Service |
|
Sound |
Swing |
Java 2D |
|
AWT |
Drag and Drop |
Input Methods |
|
Image I/O |
|||
compact3 |
Security |
JMX |
|
XML JAXP |
Management |
Instrumentation |
|
compact2 |
JDBC |
RMI |
XML JAXP |
compact1 |
Core (java.lang.*) |
Security |
Serialization |
Networking |
Ref Objects |
Regular Expressions |
|
Date and Time |
Input/Output |
Collections |
|
Logging |
Concurrency |
Reflection |
|
JAR |
ZIP |
Versioning |
|
Internationalization |
JNDI |
Override Mechanism |
|
Extension Mechanism |
Scripting |
Le tableau ci-dessous précise les packages contenus dans chaque profil.
compact1 |
compact2 |
compact3 |
java.io |
java.rmi |
java.lang.instrument |
java.lang |
java.rmi.activation |
java.lang.management |
java.lang.annotation |
java.rmi.dgc |
java.security.acl |
java.lang.invoke |
java.rmi.registry |
java.util.prefs |
java.lang.ref |
java.rmi.server |
javax.annotation.processing |
java.lang.reflect |
java.sql |
javax.lang.model |
java.math |
javax.rmi.ssl |
javax.lang.model.element |
java.net |
javax.sql |
javax.lang.model.type |
java.nio |
javax.transaction |
javax.lang.model.util |
java.nio.channels |
javax.transaction.xa |
javax.management |
java.nio.channels.spi |
javax.xml |
javax.management.loading |
java.nio.charset |
javax.xml.datatype |
javax.management.modelmbean |
java.nio.charset.spi |
javax.xml.namespace |
javax.management.monitor |
java.nio.file |
javax.xml.parsers |
javax.management.openmbean |
java.nio.file.attribute |
javax.xml.stream |
javax.management.relation |
java.nio.file.spi |
javax.xml.stream.events |
javax.management.remote |
java.security |
javax.xml.stream.util |
javax.management.remote.rmi |
java.security.cert |
javax.xml.transform |
javax.management.timer |
java.security.interfaces |
javax.xml.transform.dom |
javax.naming |
java.security.spec |
javax.xml.transform.sax |
javax.naming.directory |
java.text |
javax.xml.transform.stax |
javax.naming.event |
java.text.spi |
javax.xml.transform.stream |
javax.naming.ldap |
java.time |
javax.xml.validation |
javax.naming.spi |
java.time.chrono |
javax.xml.xpath |
javax.security.auth.kerberos |
java.time.format |
org.w3c.dom |
javax.security.sasl |
java.time.temporal |
org.w3c.dom.bootstrap |
javax.sql.rowset |
java.time.zone |
org.w3c.dom.events |
javax.sql.rowset.serial |
java.util |
org.w3c.dom.ls |
javax.sql.rowset.spi |
java.util.concurrent |
org.xml.sax |
javax.tools |
java.util.concurrent.atomic |
org.xml.sax.ext |
javax.xml.crypto |
java.util.concurrent.locks |
org.xml.sax.helpers |
javax.xml.crypto.dom |
java.util.function |
javax.xml.crypto.dsig |
|
java.util.jar |
javax.xml.crypto.dsig.dom |
|
java.util.logging |
javax.xml.crypto.dsig.keyinfo |
|
java.util.regex |
javax.xml.crypto.dsig.spec |
|
java.util.spi |
org.ietf.jgss |
|
java.util.stream |
||
java.util.zip |
||
javax.crypto |
||
javax.crypto.interfaces |
||
javax.crypto.spec |
||
javax.net |
||
javax.net.ssl |
||
javax.script |
||
javax.security.auth |
||
javax.security.auth.callback |
||
javax.security.auth.login |
||
javax.security.auth.spi |
||
javax.security.auth.x500 |
||
javax.security.cert |
La documentation Javadoc précise à quel profile une classe ou une interface appartient.
Une implémentation des spécifications de Java n'a pas l'obligation d'implémenter ses trois profiles.
L'option -profile du compilateur javac permet de demander la compilation pour le profile précisé en paramètre.
Java 8 update 5 CPU
Cette mise à jour contient des améliorations relatives à la sécurité. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/8u5-relnotes.html
La version externe est Java 8u5, le numéro de build est 1.8.0_5-b13. Elle est diffusée le 11 janvier 2014.
Java 8 update 11 CPU
Cette mise à jour contient des améliorations relatives à la sécurité et des corrections de 18 bugs. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/8u11-relnotes.html
La version externe est Java 8u11, le numéro de build est 1.8.0_11-b12.
L'outil jdeps est ajouté dans le JDK.
Il est possible de désactiver l'installation d'outils tiers sponsorisés lors de l'installation via le panneau de configuration Java (Java Control Panel).
Java 8 update 20 CPU
Cette mise à jour contient des améliorations relatives à la sécurité et des corrections de bugs. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/8u20-relnotes.html
La version externe est Java 8u20, le numéro de build est 1.8.0_20-b62.
La version 5.4 de Java Mission Control sont incluses avec cette version.
Java 8 update 25 CPU
Cette mise à jour contient des améliorations relatives à la sécurité et des corrections de bugs. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/8u25-relnotes.html
La version externe est Java 8u25, le numéro de build est 1.8.0_25-b17 (1.8.0_25-b18 sous Windows).
Oracle recommande de désactiver le support du protocole SSL V3.
Java 8 update 31 CPU
Cette mise à jour contient des améliorations relatives à la sécurité et des corrections de 26 bugs. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/8u31-relnotes.html
La version externe est Java 8u31, le numéro de build est 1.8.0_31-b13.
Le protocole SSL V3 est désactivé par défaut et retiré du panneau de configuration.
Java 8 update 40
Cette mise à jour contient des améliorations et des corrections de bugs. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/8u40-relnotes.html
La version externe est Java 8u40, le numéro de build est 1.8.0_40-b26.
Les mécanismes endorsed et extension sont deprecated et pourront être retiré dans les versions futures. L'option XX:+CheckEndorsedAndExtDirs permet de vérifier si la JVM est configurée pour utiliser un de ces mécanismes.
Des optimisations ont été apportées au projet Nashorn et certains paramètres par défaut du ramasse-miettes G1 ont été modifiés pour limiter les full GC.
Java 8 update 45 CPU
Cette mise à jour contient des améliorations relatives à la sécurité et des corrections de bugs. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/8u45-relnotes.html
La version externe est Java 8u45, le numéro de build est 1.8.0_45-b15.
Java 8 update 51 CPU
Cette mise à jour contient des améliorations relatives à la sécurité et des corrections de bugs. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/8u51-relnotes.html
La version externe est Java 8u51, le numéro de build est 1.8.0_51-b16.
Java 8 update 60
Cette mise à jour contient des améliorations et des corrections de bugs. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/8u60-relnotes.html
La version externe est Java 8u60, le numéro de build est 1.8.0_60-b27.
Plusieurs améliorations ont été apportées au moteur Javascript Nashorn et à la version 1.2 du Deployment Rule Set.
Le keystore de type JKS peut accéder à des fichiers au format PKCS12.
Les algorithmes de chiffrement de TLS reposant sur RC4 sont désactivés par défaut car ils sont considérés comme non sûre.
Les méthodes monitorEnter(), monitorExit() et tryMonitorEnter() de la classe sun.misc.Unsafe sont deprecated.
Java 8 update 65
Cette mise à jour contient des améliorations relatives à la sécurité et des corrections de bugs. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/8u65-relnotes.html
La version externe est Java 8u65, le numéro de build est 1.8.0_65-b17.
Java 8 update 66
Cette mise à jour contient des améliorations et des corrections de bugs. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/8u66-relnotes.htmlLa version externe est Java 8u66, le numéro de build est 1.8.0_66-b17.
Java 8 update 71
Cette mise à jour contient des améliorations relatives à la sécurité et des corrections de bugs. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/8u71-relnotes.html
La version externe est Java 8u71, le numéro de build est 1.8.0_71-b15.
Java 8 update 73
Cette mise à jour contient des améliorations relatives à la sécurité et des corrections de bugs. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/8u73-relnotes.html
La version externe est Java 8u73, le numéro de build est 1.8.0_73-b02.
Java 8 update 77
Cette mise à jour contient des améliorations relatives à la sécurité. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/8u77-relnotes.html
La version externe est Java 8u77, le numéro de build est 1.8.0_77-b03.
Java 8 update 91
Cette mise à jour contient des améliorations relatives à la sécurité et des corrections de bugs. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/8u91-relnotes.html
La version externe est Java 8u91, le numéro de build est 1.8.0_91-b14 pour Windows et 1.8.0_91-b15 pour les autres systèmes d'exploitation.
De nouveaux certificats racine sont ajoutés.
Java 8 update 101 (juillet 2016)
Cette mise à jour contient des améliorations relatives à la sécurité et des corrections de bugs. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/8u101-relnotes.html
La version externe est Java 8u101, le numéro de build est 1.8.0_101-b13.
De nouveaux certificats racine sont ajoutés.
Java 8 update 111 (octobre 2016)
Cette mise à jour contient des améliorations relatives à la sécurité et des corrections de bugs. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/8u111-relnotes.html
La version externe est Java 8u111, le numéro de build est 1.8.0_111-b14.
Java 8 update 121 (janvier 2017)
Cette mise à jour contient des améliorations relatives à la sécurité et des corrections de bugs. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/8u121-relnotes.html
La version externe est Java 8u121, le numéro de build est 1.8.0_121-b13.
Java 8 update 131 (avril 2017)
Cette mise à jour contient des améliorations relatives à la sécurité et des corrections de bugs. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/8u131-relnotes.html
La version externe est Java 8u131, le numéro de build est 1.8.0_131-b11.
Java 8 update 141 (juillet 2017)
Cette mise à jour contient des améliorations relatives à la sécurité et des corrections de bugs. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/8u141-relnotes.html
La version externe est Java 8u141, le numéro de build est 1.8.0_141-b15.
Java 8 update 144 (juillet 2017)
Cette mise à jour contient des améliorations relatives à la sécurité et des corrections de bugs. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/8u144-relnotes.html
La version externe est Java 8u144, le numéro de build est 1.8.0_144-b01.
Java 8 update 151 (octobre 2017)
Cette mise à jour contient des améliorations relatives à la sécurité et des corrections de bugs. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/8u151-relnotes.html
La version externe est Java 8u151, le numéro de build est 1.8.0_151-b12.
Java 8 update 161 (janvier 2018)
Cette mise à jour contient des améliorations relatives à la sécurité et des corrections de bugs. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/8u161-relnotes.html
La version externe est Java 8u161, le numéro de build est 1.8.0_161-b12.
Java 8 update 171 (avril 2018)
Cette mise à jour contient des améliorations relatives à la sécurité et des corrections de bugs. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/8u171-relnotes.html
La version externe est Java 8u171, le numéro de build est 1.8.0_171-b11.
Java 8 update 181 (juillet 2018)
Cette mise à jour contient des améliorations relatives à la sécurité et des corrections de bugs. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/8u181-relnotes.html
La version externe est Java 8u181, le numéro de build est 1.8.0_181-b13.
La base de données Java DB n'est plus incluse dans le JDK : elle peut être téléchargée indépendamment sur le site d'Apache Derby.
Java 8 update 191 (octobre 2018)
Cette mise à jour contient des améliorations relatives à la sécurité et des corrections de bugs. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/8u191-relnotes.html
La version externe est Java 8u191, le numéro de build est 1.8.0_191-b12.
La version de gcc utilisée pour compiler les versions Linux x86/x64 du JDK est 7.3 en remplacement de la version 4.3.
Les algorithmes TLS reposant sur DES sont désactivés et plusieurs certificats racines qui ne sont plus utilisés sont retirés.
Le support de Docker a été amélioré grâce au report de 3 fonctionnalités de Java 10 :
Java 8 update 201 (janvier 2019)
Cette mise à jour contient des améliorations relatives à la sécurité et des corrections de bugs. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/8u201-relnotes.html
La version externe est Java 8u201, le numéro de build est 1.8.0_201-b09.
Java 8 update 211 (avril 2019)
Cette mise à jour contient des améliorations relatives à la sécurité et des corrections de bugs. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/8u211-relnotes.html
Cette version propose un support pour la nouvelle ère du calendrier japonais nommé Reiwa.
La version externe est Java 8u211, le numéro de build est 1.8.0_211-b12.
Java 8 update 221 (juillet 2019)
Cette mise à jour contient des améliorations relatives à la sécurité et des corrections de bugs. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/8u221-relnotes.html
La JVM détecte correctement la version Server 2019 de Windows.
La version externe est Java 8u221, le numéro de build est 1.8.0_221-b11.
Java 8 update 231 (octobre 2019)
Cette mise à jour contient des améliorations relatives à la sécurité et des corrections de bugs. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/8u231-relnotes.html
4 nouveaux événements de JFR relatifs à la sécurité ont été ajoutés.
La version externe est Java 8u231, le numéro de build est 1.8.0_231-b11.
Java 8 update 241 (janvier 2020)
Cette mise à jour contient des améliorations relatives à la sécurité et des corrections de bugs. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/8u241-relnotes.html
La version externe est Java 8u241, le numéro de build est 1.8.0_241-b07.
Java 8 update 251 (avril 2020)
Cette mise à jour contient des améliorations relatives à la sécurité et des corrections de bugs. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/8u251-relnotes.html
La version externe est Java 8u251, le numéro de build est 1.8.0_251-b08.
Java 8 update 261 (juillet 2020)
Cette mise à jour contient des améliorations relatives à la sécurité et des corrections de bugs. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/8u261-relnotes.html
Le build sous Windows utilise Visual Studio 2017 ce qui change les dll utilisées par le JDK.
Un support de TLS 1.3 est inclus.
Java Mission Control n'est plus fourni avec la JDK.
Les méthodes getFreePhysicalMemorySize(), getTotalPhysicalMemorySize(), getFreeSwapSpaceSize(), getTotalSwapSpaceSize(), getSystemCpuLoad()de l'OperatingSystemMXBean retourne des informtions tenant compte des limitations appliquées lors de l'exécution de la JVM dans un conteneur.
La version externe est Java 8u261, le numéro de build est 1.8.0_261-b12.
Java 8 update 271 (octobre 2020)
Cette mise à jour contient des améliorations relatives à la sécurité et des corrections de bugs. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/8u271-relnotes.html
Le plug-in Java utilisant le connecteur NPAPI a été rétiré sur les plate-formes Linux, Solaris et MacOS car tous les navigateurs ont retirés l'utilisation de ce connecteur.
La version externe est Java 8u271, le numéro de build est 1.8.0_271-b09.
Java 8 update 281 (janvier 2021)
Cette mise à jour contient des améliorations relatives à la sécurité et des corrections de bugs. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/8u281-relnotes.html
La version externe est Java 8u281, le numéro de build est 1.8.0_281-b09.
Java 8 update 291 (avril 2021)
Cette mise à jour contient des améliorations relatives à la sécurité et des corrections de bugs. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/8u291-relnotes.html
TLS 1.0 et 1.1 sont désactivés par défaut. Pour les réactiver, il faut supprimer "TLSv1" et/ou "TLSv1.1" de la propriété jdk.tls.disabledAlgorithms dans le fichier de configuration java.security.
La version externe est Java 8u291, le numéro de build est 1.8.0_291-b10.
Java 8 update 301 (juillet 2021)
Cette mise à jour contient des améliorations relatives à la sécurité et des corrections de bugs. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/8u301-relnotes.html
Les algorithmes de chiffrement par défaut utilisés dans un keystore PKCS #12 ont été mis à jour pour utiliser des algorithmes plus forts basés sur AES-256 et SHA-256.
La version externe est Java 8u301, le numéro de build est 1.8.0_301-b09.
Java 8 update 311 (octobre 2021)
Cette mise à jour contient des améliorations relatives à la sécurité et des corrections de bugs. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/8u311-relnotes.html
La version externe est Java 8u311, le numéro de build est 1.8.0_311-b11.
Java 8 update 321 (janvier 2022)
Cette mise à jour contient des améliorations relatives à la sécurité et des corrections de bugs. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/8u321-relnotes.html
La version externe est Java 8u321, le numéro de build est 1.8.0_321-b07.
Java 8 update 331 (avril 2022)
Cette mise à jour contient des améliorations relatives à la sécurité et des corrections de bugs. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/8u331-relnotes.html
La version externe est Java 8u331, le numéro de build est 1.8.0_331-b09.
Java 8 update 341 (juillet 2022)
Cette mise à jour contient des améliorations relatives à la sécurité et des corrections de bugs. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/8u341-relnotes.html
La version externe est Java 8u341, le numéro de build est 1.8.0_341-b10.
TLSv1.3 est activé par défaut cîté client
Java 8 update 351 (octobre 2022)
Cette mise à jour contient des améliorations relatives à la sécurité et des corrections de bugs. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/8u351-relnotes.html
La version externe est Java 8u351, le numéro de build est 1.8.0_351-b10.
Java 8 update 361 (janvier 2023)
Cette mise à jour contient des améliorations relatives à la sécurité et des corrections de bugs. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/8u361-relnotes.html
La version externe est Java 8u361, le numéro de build est 1.8.0_361-b09.
L'outil VisualVM n'est plus fourni avec le JDK : il doit être téléchargé séparemment à l'url https://visualvm.github.io.
Java 8 update 371 (avril 2023)
Cette mise à jour contient des améliorations relatives à la sécurité et des corrections de bugs. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/8u371-relnotes.html
La version externe est Java 8u371, le numéro de build est 1.8.0_371-b11.
Java 8 update 381 (juillet 2023)
Cette mise à jour contient des améliorations relatives à la sécurité et des corrections de bugs. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/8u381-relnotes.html
La version externe est Java 8u381, le numéro de build est 1.8.0_381-b09.
Elle comprend plusieurs améliorations et corrections visant à améliorer le support des cgroup v1 et v2 dans les conteneurs.
Java 8 update 391 (octobre 2023)
Cette mise à jour contient des améliorations relatives à la sécurité et des corrections de bugs. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/8u391-relnotes.html
La version externe est Java 8u391, le numéro de build est 1.8.0_391-b13.
Un nouvel événement JFR a été ajouté pour enregistrer les détails des invocations à java.security.Provider.getService(String type, String algorithm).
À partir de cette version, les valeurs "allow" et "disallow" de la propriété système java.security.manager sont ignorées.
Java SE 9 est issu des travaux d'Oracle, du JCP et des travaux d'implémentation du projet open source OpenJDK.
Les spécifications de Java SE 9 sont définit dans la JSR 337.
De nombreuses JEP ont été incluses dans Java 9 :
Numéro | Titre | Numéro | Titre |
102 | Process API Updates | 252 | Use CLDR Locale Data by Default |
110 | HTTP 2 Client | 253 | Prepare JavaFX UI Controls & CSS APIs for Modularization |
143 | Improve Contended Locking | 254 | Compact Strings |
158 | Unified JVM Logging | 255 | Merge Selected Xerces 2.11.0 Updates into JAXP |
165 | Compiler Control | 256 | BeanInfo Annotations |
193 | Variable Handles | 257 | Update JavaFX/Media to Newer Version of GStreamer |
197 | Segmented Code Cache | 258 | HarfBuzz Font-Layout Engine |
199 | Smart Java Compilation, Phase Two | 259 | Stack-Walking API |
200 | The Modular JDK | 260 | Encapsulate Most Internal APIs |
201 | Modular Source Code | 261 | Module System |
211 | Elide Deprecation Warnings on Import Statements | 262 | TIFF Image I/O |
212 | Resolve Lint and Doclint Warnings | 263 | HiDPI Graphics on Windows and Linux |
213 | Milling Project Coin | 264 | Platform Logging API and Service |
214 | Remove GC Combinations Deprecated in JDK 8 | 265 | Marlin Graphics Renderer |
215 | Tiered Attribution for javac | 266 | More Concurrency Updates |
216 | Process Import Statements Correctly | 267 | Unicode 8.0 |
217 | Annotations Pipeline 2.0 | 268 | XML Catalogs |
219 | Datagram Transport Layer Security (DTLS) | 269 | Convenience Factory Methods for Collections |
220 | Modular Run-Time Images | 270 | Reserved Stack Areas for Critical Sections |
221 | Simplified Doclet API | 271 | Unified GC Logging |
222 | jshell: The Java Shell (Read-Eval-Print Loop) | 272 | Platform-Specific Desktop Features |
223 | New Version-String Scheme | 273 | DRBG-Based SecureRandom Implementations |
224 | HTML5 Javadoc | 274 | Enhanced Method Handles |
225 | Javadoc Search | 275 | Modular Java Application Packaging |
226 | UTF-8 Property Files | 276 | Dynamic Linking of Language-Defined Object Models |
227 | Unicode 7.0 | 277 | Enhanced Deprecation |
228 | Add More Diagnostic Commands | 278 | Additional Tests for Humongous Objects in G1 |
229 | Create PKCS12 Keystores by Default | 279 | Improve Test-Failure Troubleshooting |
231 | Remove Launch-Time JRE Version Selection | 280 | Indify String Concatenation |
232 | Improve Secure Application Performance | 281 | HotSpot C++ Unit-Test Framework |
233 | Generate Run-Time Compiler Tests Automatically | 282 | jlink: The Java Linker |
235 | Test Class-File Attributes Generated by javac | 283 | Enable GTK 3 on Linux |
236 | Parser API for Nashorn | 284 | New HotSpot Build System |
237 | Linux/AArch64 Port | 285 | Spin-Wait Hints |
238 | Multi-Release JAR Files | 287 | SHA-3 Hash Algorithms |
240 | Remove the JVM TI hprof Agent | 288 | Disable SHA-1 Certificates |
241 | Remove the jhat Tool | 289 | Deprecate the Applet API |
243 | Java-Level JVM Compiler Interface | 290 | Filter Incoming Serialization Data |
244 | TLS Application-Layer Protocol Negotiation Extension | 291 | Deprecate the Concurrent Mark Sweep (CMS) Garbage Collector |
245 | Validate JVM Command-Line Flag Arguments | 292 | Implement Selected ECMAScript 6 Features in Nashorn |
246 | Leverage CPU Instructions for GHASH and RSA | 294 | Linux/s390x Port |
247 | Compile for Older Platform Versions | 295 | Ahead-of-Time Compilation |
248 | Make G1 the Default Garbage Collector | 297 | Unified arm32/arm64 Port |
249 | OCSP Stapling for TLS | 298 | Remove Demos and Samples |
250 | Store Interned Strings in CDS Archives | 299 | Reorganize Documentation |
251 | Multi-Resolution Images |
Les principales API ajoutées sont :
Java introduit le système de modules pour la plate-forme Java (JPMS : Java Plateform Modules system) issu des travaux du projet Jigsaw. Il est à l'origine de nombreuses controverses.
Java 9.0.1
Cette mise à jour contient des améliorations relatives à la sécurité et des corrections de bugs. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/9-0-1-relnotes.html
La version externe est Java 9.0.1, le numéro de build est 9.0.1+11.
Java 9.0.4
Cette mise à jour contient des améliorations relatives à la sécurité et des corrections de bugs. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/9-0-4-relnotes.html
La version externe est Java 9.0.4, le numéro de build est 9.0.4+11.
Java SE 10 est issu des travaux d'Oracle, du JCP et des travaux d'implémentation du projet open source OpenJDK.
Les spécifications de Java SE 10 sont définit dans la JSR 383.
Une douzaine de JEP ont été incluses dans Java 10 :
Numéro | Titre | Numéro | Titre |
286 | Local-Variable Type Inference | 313 | Remove the Native-Header Generation Tool (javah) |
296 | Consolidate the JDK Forest into a Single Repository | 314 | Additional Unicode Language-Tag Extensions |
304 | Garbage-Collector Interface | 316 | Heap Allocation on Alternative Memory Devices |
307 | Parallel Full GC for G1 | 317 | Experimental Java-Based JIT Compiler |
310 | Application Class-Data Sharing | 319 | Root Certificates |
312 | Thread-Local Handshakes | 322 | Time-Based Release Versioning |
Java 10 intègre une évolution dans le langage : la possibilité de définir des variables locales dont le type est inféré par le compilateur en utilisant l'instruction var.
Java 10.0.1
Cette mise à jour contient des améliorations relatives à la sécurité et des corrections de bugs. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/10-0-1-relnotes.html
La version externe est Java 10.0.1, le numéro de build est 10.0.1+10.
Java 10.0.2
Cette mise à jour contient des améliorations relatives à la sécurité et des corrections de bugs. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/10-0-2-relnotes.html
La version externe est Java 10.0.2, le numéro de build est 10.0.2+11.
Java SE 11 est issu des travaux d'Oracle, du JCP et des travaux d'implémentation du projet open source OpenJDK.
Les spécifications de Java SE 11 sont définit dans la JSR 384.
17 JEP ont été incluses dans Java 11 :
Numéro | Titre | Numéro | Titre |
181 | Nest-Based Access Control | 328 | Flight Recorder |
309 | Dynamic Class-File Constants | 329 | ChaCha20 and Poly1305 Cryptographic Algorithms |
315 | Improve Aarch64 Intrinsics | 330 | Launch Single-File Source-Code Programs |
318 | Epsilon : A No-Op Garbage Collector | 331 | Low-Overhead Heap Profiling |
320 | Remove the Java EE and CORBA Modules | 332 | Transport Layer Security (TLS) 1.3 |
321 | HTTP Client (Standard) | 333 | ZGC : A Scalable Low-Latency Garbage Collector (Experimental) |
323 | Local-Variable Syntax for Lambda Parameters | 335 | Deprecate the Nashorn JavaScript Engine |
324 | Key Agreement with Curve25519 and Curve448 | 336 | Deprecate the Pack200 Tools and API |
327 | Unicode 10 |
Java SE 11 est une version particulière désignée comme LTS (Long Time Support) : il est possible d'obtenir un support commercial sur cette version auprès de différents fournisseurs.
Java 11.0.1 (octobre 2018)
Cette mise à jour contient des améliorations relatives à la sécurité et des corrections de bugs. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/11-0-1-relnotes.html
La version externe est Java 11.0.1, le numéro de build est 11.0.1+13.
Java 11.0.2 (janvier 2019)
Cette mise à jour contient des améliorations relatives à la sécurité et des corrections de bugs. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/11-0-2-relnotes.html
La version externe est Java 11.0.2, le numéro de build est 11.0.2+9.
Swing propose un support de GTK 3.20.
Java 11.0.3 (avril 2019)
Cette mise à jour contient des améliorations relatives à la sécurité et des corrections de bugs. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/11-0-3-relnotes.html
Cette version propose un support pour la nouvelle ère du calendrier japonais nommé Reiwa.
La version externe est Java 11.0.3, le numéro de build est 11.0.3+12.
Java 11.0.4 (juillet 2019)
Cette mise à jour contient des améliorations relatives à la sécurité et des corrections de bugs. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/11-0-4-relnotes.html
la JVM détecte correctement la version Server 2019 de Windows.
La version externe est Java 11.0.4, le numéro de build est 11.0.4+10.
Java 11.0.5 (octobre 2019)
Cette mise à jour contient des améliorations relatives à la sécurité et des corrections de bugs. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/11-0-5-relnotes.html
4 nouveaux événements de JFR relatifs à la sécurité ont été ajoutés.
La version externe est Java 11.0.5, le numéro de build est 11.0.5+10.
Java 11.0.6 (janvier 2020)
Cette mise à jour contient des améliorations relatives à la sécurité et des corrections de bugs. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/11-0-6-relnotes.html
La version externe est Java 11.0.6, le numéro de build est 11.0.6+8.
Java 11.0.7 (avril 2020)
Cette mise à jour contient des améliorations relatives à la sécurité et des corrections de bugs. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/11-0-7-relnotes.html
La version externe est Java 11.0.7, le numéro de build est 11.0.7+8.
Java 11.0.8 (juillet 2020)
Cette mise à jour contient des améliorations relatives à la sécurité et des corrections de bugs. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/11-0-8-relnotes.html
Les méthodes getFreePhysicalMemorySize(), getTotalPhysicalMemorySize(), getFreeSwapSpaceSize(), getTotalSwapSpaceSize(), getSystemCpuLoad()de l'OperatingSystemMXBean retourne des informtions tenant compte des limitations appliquées lors de l'exécution de la JVM dans un conteneur.
La version externe est Java 11.0.8, le numéro de build est 11.0.8+10.
Java 11.0.9 (octobre 2020)
Cette mise à jour contient des améliorations relatives à la sécurité et des corrections de bugs. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/11-0-9-relnotes.html
La version externe est Java 11.0.9, le numéro de build est 11.0.9+7.
Java 11.0.10 (janvier 2021)
Cette mise à jour contient des améliorations relatives à la sécurité et des corrections de bugs. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/11-0-10-relnotes.html
La version externe est Java 11.0.10, le numéro de build est 11.0.10+8.
Java 11.0.11 (avril 2021)
Cette mise à jour contient des améliorations relatives à la sécurité et des corrections de bugs. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/11-0-11-relnotes.html
Les options --print-module-deps, --list-deps, et --list-reduce-deps de jdeps ont été améliorées pour prendre en compte les dépendancces transitives par défaut.
La version externe est Java 11.0.11, le numéro de build est 11.0.11+9.
Java 11.0.12 (juillet 2021)
Cette mise à jour contient des améliorations relatives à la sécurité et des corrections de bugs. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/11-0-12-relnotes.html
Les algorithmes de chiffrement par défaut utilisés dans un keystore PKCS #12 ont été mis à jour pour utiliser des algorithmes plus forts basés sur AES-256 et SHA-256.
La version externe est Java 11.0.12, le numéro de build est 11.0.12+8.
Java 11.0.13 (octobre 2021)
Cette mise à jour contient des améliorations relatives à la sécurité et des corrections de bugs. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/11-0-13-relnotes.html
Le compilateur JIT expérimental Graal écrit en Java (JEP 317) a été retiré de la JVM. L'outil expérimental de compilation Java Ahead-of-Time jaotc a aussi été retiré.
La version externe est Java 11.0.13, le numéro de build est 11.0.13+10.
Java 11.0.14 (janvier 2022)
Cette mise à jour contient des améliorations relatives à la sécurité et des corrections de bugs. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/11-0-14-relnotes.html
La version externe est Java 11.0.14, le numéro de build est 11.0.14+8.
Java 11.0.15 (avril 2022)
Cette mise à jour contient des améliorations relatives à la sécurité et des corrections de bugs. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/11-0-15-relnotes.html
La version externe est Java 11.0.15, le numéro de build est 11.0.15+8.
Java 11.0.16 (juillet 2022)
Cette mise à jour contient des améliorations relatives à la sécurité et des corrections de bugs. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/11-0-16-relnotes.html
La version externe est Java 11.0.16, le numéro de build est 11.0.16+11.
Java 11.0.17 (octobre 2022)
Cette mise à jour contient des améliorations relatives à la sécurité et des corrections de bugs. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/11-0-17-relnotes.html
La version externe est Java 11.0.17, le numéro de build est 11.0.15+10.
Java 11.0.18 (janvier 2023)
Cette mise à jour contient des améliorations relatives à la sécurité et des corrections de bugs. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/11-0-18-relnotes.html
La version externe est Java 11.0.18, le numéro de build est 11.0.18+9.
Java 11.0.19 (avril 2023)
Cette mise à jour contient des améliorations relatives à la sécurité et des corrections de bugs. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/11-0-19-relnotes.html
La version externe est Java 11.0.19, le numéro de build est 11.0.19+9.
Java 11.0.20 (juillet 2023)
Cette mise à jour contient des améliorations relatives à la sécurité et des corrections de bugs. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/11-0-20-relnotes.html
La version externe est Java 11.0.20, le numéro de build est 11.0.20+9.
Java 11.0.21 (octobre 2023)
Cette mise à jour contient des améliorations relatives à la sécurité et des corrections de bugs. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/11-0-21-relnotes.html
La version externe est Java 11.0.21, le numéro de build est 11.0.21+9.
Java SE 12 est issu des travaux d'Oracle, du JCP et des travaux d'implémentation du projet open source OpenJDK.
Les spécifications de Java SE 12 sont définit dans la JSR 386.
Huit JEP ont été incluses dans Java 12 :
Numéro | Titre | Numéro | Titre |
189 | Shenandoah: A Low-Pause-Time Garbage Collector (Experimental) | 340 | One AArch64 Port, Not Two |
230 | Microbenchmark Suite | 341 | Default CDS Archives |
325 | Switch Expressions (Preview) | 344 | Abortable Mixed Collections for G1 |
334 | JVM Constants API | 346 | Promptly Return Unused Committed Memory from G1 |
Java 12 intègre en mode preview une évolution dans l'instruction switch et un nouveau ramasse-miettes expérimental.
Java 12.0.1 (avril 219)
Cette mise à jour contient des améliorations relatives à la sécurité et des corrections de bugs. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/12-0-1-relnotes.html
La version externe est Java 12.0.1, le numéro de build est 12.0.1+12.
Java 12.0.2 (juillet 2019)
Cette mise à jour contient des améliorations relatives à la sécurité et des corrections de bugs. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/12-0-2-relnotes.html
La version externe est Java 12.0.2, le numéro de build est 12.0.2+10.
Java SE 13 est issu des travaux d'Oracle, du JCP et des travaux d'implémentation du projet open source OpenJDK.
Les spécifications de Java SE 13 sont définit dans la JSR 388.
Cinq JEP ont été incluses dans Java 13 :
Numéro | Titre | Numéro | Titre |
350 |
Dynamic CDS Archives | 354 | Switch Expressions (Preview) |
351 | ZGC: Uncommit Unused Memory | 355 | Text Blocks (Preview) |
353 | Reimplement the Legacy Socket API |
Java 13 propose en mode preview deux évolutions dans le langage : l'utilisation de yield dans l'instruction switch et les Text Blocks.
Java 13.0.1 (octobre 2019)
Cette mise à jour contient des améliorations relatives à la sécurité et des corrections de bugs. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/13-0-1-relnotes.html
La version externe est Java 13.0.1, le numéro de build est 13.0.1+09.
Java 13.0.2 (janvier 2020)
Cette mise à jour contient des améliorations relatives à la sécurité et des corrections de bugs. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/13-0-2-relnotes.html
La version externe est Java 13.0.2, le numéro de build est 13.0.2+8.
Java SE 14 est issu des travaux d'Oracle, du JCP et des travaux d'implémentation du projet open source OpenJDK.
Les spécifications de Java SE 14 sont définit dans la JSR 389.
Seize JEP ont été incluses dans Java 14 :
Numéro | Titre | Numéro | Titre |
305 | Pattern Matching for instanceof (Preview) | 362 | Deprecate the Solaris and SPARC Ports |
362 | Deprecate the Solaris and SPARC Ports | 363 | Remove the Concurrent Mark Sweep (CMS) Garbage Collector |
343 | Packaging Tool (Incubator) | 364 | ZGC on macOS |
345 | NUMA-Aware Memory Allocation for G1 | 365 | ZGC on Windows |
349 | JFR Event Streaming | 366 | Deprecate the ParallelScavenge + SerialOld GC Combination |
352 | Non-Volatile Mapped Byte Buffers | 367 | Remove the Pack200 Tools and API |
358 | Helpful NullPointerExceptions | 368 | Text Blocks (Second Preview) |
359 | Records (Preview) | 370 | Foreign-Memory Access API (Incubator) |
Java 14 intègre en standard les évolutions dans l'instruction switch.
Java 14 propose en mode preview trois évolutions dans le langage : les Texts blocks, les Records, le pattern matching pour l'instruction instanceof.
Il y a aussi des changements dans les ramasse-miettes : CMS est retiré et ZGC est proposé en expérimental sous Windows et MacOS.
Java 14.0.1 (avril 2020)
Cette mise à jour contient des améliorations relatives à la sécurité et des corrections de bugs. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/14-0-1-relnotes.html
La version externe est Java 14.0.1, le numéro de build est 14.0.1+07.
Java 14.0.2 (juillet 2020)
Cette mise à jour contient des améliorations relatives à la sécurité et des corrections de bugs. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/14-0-2-relnotes.html
La version externe est Java 14.0.2, le numéro de build est 14.0.2+12.
Java SE 15 est issu des travaux d'Oracle, du JCP et des travaux d'implémentation du projet open source OpenJDK.
Les spécifications de Java SE 15 sont définit dans la JSR 390.
Quatorze JEP ont été incluses dans Java 15 :
Numéro | Titre | Numéro | Titre |
339 | Edwards-Curve Digital Signature Algorithm (EdDSA) | 377 | ZGC: A Scalable Low-Latency Garbage Collector |
360 | Sealed Classes (Preview) | 378 | Text Blocks |
371 | Hidden Classes | 379 | Shenandoah: A Low-Pause-Time Garbage Collector |
372 | Remove the Nashorn JavaScript Engine | 381 | Remove the Solaris and SPARC Ports |
373 | Reimplement the Legacy DatagramSocket API | 383 | Foreign-Memory Access API (Second Incubator) |
374 | Disable and Deprecate Biased Locking | 384 | Records (Second Preview) |
375 | Pattern Matching for instanceof (Second Preview) | 385 | Deprecate RMI Activation for Removal |
Java 15.0.1 (octobre 2020)
Cette mise à jour contient des améliorations relatives à la sécurité et des corrections de bugs. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/15-0-1-relnotes.html
La version externe est Java 15.0.1, le numéro de build est 15.0.1+09.
Java 15.0.2 (janvier 2021)
Cette mise à jour contient des améliorations relatives à la sécurité et des corrections de bugs. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/15-0-2-relnotes.html
La version externe est Java 15.0.2, le numéro de build est 15.0.2+7.
Java SE 16 est issu des travaux d'Oracle, du JCP et des travaux d'implémentation du projet open source OpenJDK.
Les spécifications de Java SE 16 sont définit dans la JSR 391.
Dix sept JEP ont été incluses dans Java 16 :
Numéro | Titre | Numéro | Titre |
338 | Vector API (Incubator) | 388 | Windows/AArch64 Port |
347 | Enable C++14 Language Features | 389 | Foreign Linker API (Incubator) |
357 | Migrate from Mercurial to Git | 390 | Warnings for Value-Based Classes |
369 | Migrate to GitHub | 392 | Packaging Tool |
376 | ZGC: Concurrent Thread-Stack Processing | 393 | Foreign-Memory Access API (Third Incubator) |
380 | Unix-Domain Socket Channels | 394 | Pattern Matching for instanceof |
386 | Alpine Linux Port | 395 | Records |
387 | Elastic Metaspace | 396 | Strongly Encapsulate JDK Internals by Default |
397 | Sealed Classes (Second Preview) |
En Java, il est possible de créer des classes locales, qui sont des classes définies dans une méthode.
Historiquement, les interfaces et les énumérations locales sont proscrites en raison de préoccupations sémantiques : les énumérations imbriquées et les interfaces imbriquées sont implicitement statiques, donc les énumérations locales et les interfaces locales devraient être implicitement statiques aussi. Cependant, les déclarations locales dans le langage Java (variables locales, classes locales) ne sont jamais statiques par défaut. Cette sémantique a évolué avec l'introduction des record locaux, en permettant à une déclaration locale d'être statique, ouvrant la porte aux énumérations locales et aux interfaces locales.
La JEP 395 incluse dans Java 16 introduit dans le langage Java la possibilité d'utiliser des interfaces et des énumérations locales.
Les énumérations imbriquées et les interfaces imbriquées sont déjà implicitement statiques. Par souci de cohérence, les énumérations locales et des interfaces locales sont également implicitement statiques.
Les interfaces et énumérations locales ne peuvent pas capturer les variables non static du contexte englobant comme les paramètres de la méthode.
Java 16.0.1 (avril 2021)
Cette mise à jour contient des améliorations relatives à la sécurité et des corrections de bugs. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/16-0-1-relnotes.html
La version externe est Java 16.0.1, le numéro de build est 16.0.1+9.
Java 16.0.2 (juillet 2021)
Cette mise à jour contient des améliorations relatives à la sécurité et des corrections de bugs. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/16-0-2-relnotes.html
La version externe est Java 16.0.2, le numéro de build est 16.0.2+7.
Java SE 17 est issu des travaux d'Oracle, du JCP et des travaux d'implémentation du projet open source OpenJDK.
Les spécifications de Java SE 17 sont définit dans la JSR 392.
Quatorze JEP ont été incluses dans Java 17 :
Numéro | Titre | Numéro | Titre |
306 | Restore Always-Strict Floating-Point Semantics | 407 | Remove RMI Activation |
356 | Enhanced Pseudo-Random Number Generators | 409 | Sealed Classes |
382 | New macOS Rendering Pipeline | 410 | Remove the Experimental AOT and JIT Compiler |
391 | macOS/AArch64 Port | 411 | Deprecate the Security Manager for Removal |
398 | Deprecate the Applet API for Removal | 412 | Foreign Function & Memory API (Incubator) |
403 | Strongly Encapsulate JDK Internals | 414 | Vector API (Second Incubator) |
406 | Pattern Matching for switch (Preview) | 415 | Context-Specific Deserialization Filters |
Java SE 17 est une version particulière désignée comme LTS (Long Time Support) : il est possible d'obtenir un support commercial sur cette version auprès de différents fournisseurs.
Java 17.0.1 (octobre 2021)
Cette mise à jour contient des améliorations relatives à la sécurité et des corrections de bugs. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/17-0-1-relnotes.html
La version externe est Java 17.0.1, le numéro de build est 17.0.1+12.
Java 17.0.2 (janvier 2022)
Cette mise à jour contient des améliorations relatives à la sécurité et des corrections de bugs. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/17-0-2-relnotes.html
La version externe est Java 17.0.2, le numéro de build est 17.0.2+8.
Java 17.0.3 (avril 2022)
Cette mise à jour contient des améliorations relatives à la sécurité et des corrections de bugs. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/17-0-3-relnotes.html
La version externe est Java 17.0.3, le numéro de build est 17.0.3+8.
Java 17.0.4 (juillet 2022)
Cette mise à jour contient des améliorations relatives à la sécurité et des corrections de bugs. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/17-0-4-relnotes.html
La version externe est Java 17.0.4, le numéro de build est 17.0.4+11.
À partir de cette version du JDK, par défaut, la JVM Hotspot ne prend plus en compte le paramètre "cpu.shares" de cgroups lorsqu'elle détermine le nombre de threads à utiliser par les différents pools de threads. L'option de ligne de commande -XX:+UseContainerCpuShares peut être utilisée pour revenir au comportement précédent. Cette option est dépréciée et pourrait être supprimée dans une prochaine version du JDK.
Java 17.0.5 (octobre 2022)
Cette mise à jour contient des améliorations relatives à la sécurité et des corrections de bugs. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/17-0-5-relnotes.html
La version externe est Java 17.0.5, le numéro de build est 17.0.5+9.
Java 17.0.6 (janvier 2023)
Cette mise à jour contient des améliorations relatives à la sécurité et des corrections de bugs. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/17-0-6-relnotes.html
La version externe est Java 17.0.6, le numéro de build est 17.0.6+9.
Java 17.0.7 (avril 2023)
Cette mise à jour contient des améliorations relatives à la sécurité et des corrections de bugs. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/17-0-7-relnotes.html
La version externe est Java 17.0.7, le numéro de build est 17.0.7+8.
Java 17.0.8 (juillet 2023)
Cette mise à jour contient des améliorations relatives à la sécurité et des corrections de bugs. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/17-0-8-relnotes.html
La version externe est Java 17.0.8, le numéro de build est 17.0.8+9.
Java 17.0.9 (octobre 2023)
Cette mise à jour contient des améliorations relatives à la sécurité et des corrections de bugs. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/17-0-9-relnotes.html
La version externe est Java 17.0.9, le numéro de build est 17.0.9+11.
Java SE 18 est issu des travaux d'Oracle, du JCP et des travaux d'implémentation du projet open source OpenJDK.
Les spécifications de Java SE 18 sont définit dans la JSR 393.
Neuf JEP sont été incluses dans Java 18 :
Numéro | Titre | Numéro | Titre |
400 | UTF-8 by Default |
418 | Internet-Address Resolution SPI |
408 | Simple Web Server |
419 | Foreign Function & Memory API (Second Incubator) |
413 | Code Snippets in Java API Documentation | 420 | Pattern Matching for switch (Second Preview) |
416 | Reimplement Core Reflection with Method Handles | 421 | Deprecate Finalization for Removal |
417 | Vector API (Third Incubator) |
Java 18.0.1 (mai 2022)
Cette mise à jour contient des améliorations relatives à la sécurité et des corrections de bugs. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/18-0-1-relnotes.html
La version externe est Java 18.0.1, le numéro de build est 18.0.1+10.
Java 18.0.2 (août 2022)
Cette mise à jour contient des améliorations relatives à la sécurité et des corrections de bugs. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/18-0-2-relnotes.html
La version externe est Java 18.0.2, le numéro de build est 18.0.2+9.
Java SE 19 est issu des travaux d'Oracle, du JCP et des travaux d'implémentation du projet open source OpenJDK.
Les spécifications de Java SE 19 sont définit dans la JSR 394.
Sept JEP sont été incluses dans Java 19 :
Numéro | Titre | Numéro | Titre |
405 | Record Patterns (Preview) | 426 | Vector API (Fourth Incubator) |
422 | Linux/RISC-V Port | 427 | Pattern Matching for switch (Third Preview) |
424 | Foreign Function & Memory API (Preview) | 428 | Structured Concurrency (Incubator) |
425 | Virtual Threads (Preview) |
Java 19.0.1 (octobre 2022)
Cette mise à jour contient des améliorations relatives à la sécurité et des corrections de bugs. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/19-0-1-relnotes.html
La version externe est Java 19.0.1, le numéro de build est 19.0.1+10.
Java 19.0.2 (janvier 2023)
Cette mise à jour contient des améliorations relatives à la sécurité et des corrections de bugs. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/19-0-2-relnotes.html
La version externe est Java 19.0.2, le numéro de build est 19.0.2+7.
Java SE 20 est issu des travaux d'Oracle, du JCP et des travaux d'implémentation du projet open source OpenJDK.
Les spécifications de Java SE 20 sont définit dans la JSR 395.
Sept JEP sont été incluses dans Java 20 :
Java 20.0.1 (avril 2023)
Cette mise à jour contient des améliorations relatives à la sécurité et des corrections de bugs. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/20-0-1-relnotes.html
La version externe est Java 20.0.1, le numéro de build est 20.0.1+9.
Java 20.0.2 (juillet 2023)
Cette mise à jour contient des améliorations relatives à la sécurité et des corrections de bugs. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/20-0-2-relnotes.html
La version externe est Java 20.0.2, le numéro de build est 20.0.2+9.
Java SE 21 est issu des travaux d'Oracle, du JCP et des travaux d'implémentation du projet open source OpenJDK.
Les spécifications de Java SE 21 sont définit dans la JSR 396.
Quinze JEP sont été incluses dans Java 21 :
Java 21.0.1 (ocotbre 2023)
Cette mise à jour contient des améliorations relatives à la sécurité et des corrections de bugs. La liste complète est consultable à l'url : https://www.oracle.com/java/technologies/javase/21-0-1-relnotes.html
La version externe est Java 21.0.1, le numéro de build est 21.0.1+12.
Au fur et à mesure des nouvelles versions de Java, le nombre de packages, de classes de modules (à partir de Java 9) fluctue :
Plateforme | Version | Nombre de packages | Nombre de classes | Nombre de modules |
Java | 1.0 |
8 |
201 |
|
1.1 |
23 |
503 |
||
1.2 |
59 |
1520 |
||
J2SE | 1.3 |
76 |
1840 |
|
1.4 |
135 |
2990 |
||
5.0 |
166 |
3280 |
||
Java SE | 6 |
202 |
3780 |
|
7 |
209 |
4024 |
||
8 |
217 |
4240 |
||
9 |
315 |
6005 |
98 |
|
10 |
314 |
6002 |
99 |
|
11 |
223 |
4410 |
71 |
|
12 |
225 |
4432 |
71 |
|
13 |
223 |
4403 |
71 |
|
14 |
225 |
4419 |
73 |
|
15 |
223 |
4265 |
73 |
|
16 |
224 |
4373 |
71 |
|
17 |
224 |
4371 |
71 |
|
18 |
224 |
4405 |
71 |
|
19 |
225 |
4419 |
71 |
|
20 |
225 |
4429 |
71 |
|
21 |
223 |
4443 |
70 |
Chaque version de Java possède une durée de support durant laquelle Sun/Oracle propose des mises à jour de la plate-forme concernant la correction de bugs et de failles de sécurité.
La date de fin de ce support est définie par une date de fin de vie (End Of Life).
Version | Date de diffusion (GA) | Date de fin de vie (EOL) par Oracle |
J2SE 1.4 |
Février 2002 |
Octobre 2008 |
J2SE 5.0 |
Mai 2004 |
Octobre 2009 |
Java SE 6 |
Décembre 2006 |
Initialement prévue en juillet 2012, repoussée à novembre 2012 |
Java SE 7 |
Juillet 2011 |
Avril 2015 |
Java SE 8 |
Mars 2014 |
Initialement prévue en mars 2017, repoussée à janvier 2019 puis à décembre 2030 |
Java SE 9 |
Septembre 2017 |
Mars 2018 |
Java SE 10 |
Mars 2018 |
Septembre 2018 |
Java SE 11 |
Septembre 2018 |
Septembre 2023, repoussée à septembre 2026 |
Java SE 12 |
Mars 2019 |
Septembre 2019 |
Java SE 13 |
Septembre 2019 |
Mars 2020 |
Java SE 14 |
Mars 2020 |
Septembre 2020 |
Java SE 15 |
Septembre 2020 |
Mars 2021 |
Java SE 16 |
Mars 2021 |
Septembre 2021 |
Java SE 17 |
Septembre 2021 |
Septembre 2026 |
Java SE 18 |
Mars 2022 |
Septembre 2022 |
Java SE 19 |
Septembre 2022 |
Mars 2023 |
Java SE 20 |
Mars 2023 |
Septembre 2023 |
Java SE 21 |
Septembre 2023 |
Septembre 2028 |
Il est cependant possible d'obtenir une prolongation en souscrivant à un support payant auprès d'Oracle ou d'autres fournisseurs de JDK.
Les dates fournies concernent Oracle : d'autres fournisseurs peuvent proposer des dates de fin de support différents.
La communauté Java est très productive car elle regroupe :
Ainsi l'ensemble des API et des outils utilisables est énorme et évolue très rapidement. Les tableaux ci-dessous tentent de recenser les principaux par thème.
J2SE 1.4
|
Les outils du JDK de Sun/Oracle
|
Les outils libres (les plus connus)
|
Les autres API | ||||||||||||||||||||||||||||||||||||||||
Données | Web | Entreprise | XML | Divers | ||||||||||||||||||||||||||||||||||||
|
|
|
Services Web
|
|
Les API de la communauté open source | ||||||||||||||||||||||||||
Données
|
Web
|
Entreprise
|
XML
|
Divers
|
Il ne faut pas confondre Java et JavaScript. JavaScript est un langage développé par Netscape Communications.
La syntaxe des deux langages est très proche car ils dérivent tous les deux du C++.
Il existe de nombreuses différences entre les deux langages :
Java | Javascript | |
Auteur | Développé par Sun Microsystems | Développé par Netscape Communications |
Format | Compilé sous forme de bytecode | Interprété |
Stockage | Applet téléchargé comme un élément de la page web | Source inséré dans la page web |
Utilisation | Utilisable pour développer tous les types d'applications | Utilisable pour "dynamiser" les pages web |
Exécution | Exécuté dans la JVM | Exécuté par un moteur dans le navigateur |
POO | Orienté objets reposant sur des classes | Orienté objets reposant sur le prototypage |
Typage | Fortement typé | Pas de contrôle de type |
Complexité du code | Code relativement complexe | Code simple |
Le JDK et la documentation sont librement téléchargeables sur le site d'Oracle :
https://www.oracle.com/java/technologies/
Pour installer le JDK 1.3 sous Windows 9x, il suffit de télécharger et d'exécuter le programme : j2sdk1_3_0-win.exe
Le programme commence par désarchiver les composants.
Le programme utilise InstallShield pour guider et réaliser l'installation.
L'installation vous souhaite la bienvenue et vous donne quelques informations d'usage.
L'installation vous demande ensuite de lire et d'approuver les termes de la licence d'utilisation.
L'installation vous demande le répertoire dans lequel le JDK va être installé. Le répertoire proposé par défaut est pertinent car il est simple.
L'installation vous demande les composants à installer :
L'installation se poursuit par la copie des fichiers et la configuration du JRE.
L'archive contient la documentation sous forme d'arborescence dont la racine est jdk1.3\docs.
Si le répertoire par défaut a été utilisé lors de l'installation, il suffit de décompresser l'archive à la racine du disque C:\.
Il peut être pratique de désarchiver le fichier dans un sous-répertoire, ce qui permet de réunir plusieurs versions de la documentation.
Pour un bon fonctionnement du JDK, il est recommandé de paramétrer correctement deux variables systèmes : la variable PATH qui définit les chemins de recherche des exécutables et la variable CLASSPATH qui définit les chemins de rechercher des classes et bibliothèques Java.
Pour configurer la variable PATH, il suffit d'ajouter à la fin du fichier autoexec.bat :
Exemple : |
SET PATH=%PATH%;C:\JDK1.3\BIN
Attention : si une version antérieure du JDK était déjà présente, la variable PATH doit déjà contenir un chemin vers les utilitaires du JDK. Il faut alors modifier ce chemin sinon c'est l'ancienne version qui sera utilisée. Pour vérifier la version du JDK utilisée, il suffit de saisir la commande java -version dans une fenêtre DOS.
La variable CLASSPATH est aussi définie dans le fichier autoexec.bat. Il suffit d'ajouter une ligne ou de modifier la ligne existante définissant cette variable.
Exemple : |
SET CLASSPATH=C:\JAVA\DEV;
Dans un environnement de développement, il est pratique d'ajouter le . qui désigne le répertoire courant dans le CLASSPATH surtout lorsque l'on n'utilise pas d'outils de type IDE. Attention toutefois, cette pratique est fortement déconseillée dans un environnement de production pour ne pas poser de problèmes de sécurité.
Il faudra ajouter par la suite les chemins d'accès aux différents packages requis par les développements afin de les faciliter.
Pour que ces modifications prennent effet dans le système, il faut redémarrer Windows ou exécuter ces deux instructions sur une ligne de commande DOS.
Le répertoire dans lequel a été installé le JDK contient plusieurs répertoires. Les répertoires donnés ci-après sont ceux utilisés en ayant gardé le répertoire par défaut lors de l'installation.
Répertoire | Contenu |
C:\jdk1.3 | Le répertoire d'installation contient deux fichiers intéressants : le fichier readme.html qui fournit quelques informations, des liens web et le fichier src.jar qui contient le source Java de nombreuses classes. Ce dernier fichier n'est présent que si l'option correspondante a été cochée lors de l'installation. |
C:\jdk1.3\bin | Ce répertoire contient les exécutables : le compilateur javac, l'interpréteur java, le débuggeur jdb et d'une façon générale tous les outils du JDK. |
C:\jdk1.3\demo | Ce répertoire n'est présent que si l'option nécessaire a été cochée lors de l'installation. Il contient des applications et des applets avec leur code source. |
C:\jdk1.3\docs | Ce répertoire n'est présent que si la documentation a été décompressée. |
C:\jdk1.3\include et C:\jdk1.3\include-old | Ces répertoires ne sont présents que si les options nécessaires ont été cochées lors de l'installation. Il contient des fichiers d'en-tête C (fichier avec l'extension .H) qui permettent de faire interagir du code Java avec du code natif |
C:\jdk1.3\jre | Ce répertoire contient le JRE : il regroupe le nécessaire à l'exécution des applications notamment le fichier rt.jar qui regroupe les API. Depuis la version 1.3, le JRE contient deux machines virtuelles : la JVM classique et la JVM utilisant la technologie Hot spot. Cette dernière est bien plus rapide et c'est elle qui est utilisée par défaut. Les éléments qui composent le JRE sont séparés dans les répertoires bin et lib selon leur nature. |
C:\jdk1.3\lib | Ce répertoire ne contient plus que quelques bibliothèques notamment le fichier tools.jar. Avec le JDK 1.1 ce répertoire contenait le fichier de la bibliothèque standard. Ce fichier est maintenant dans le répertoire JRE. |
Télécharger sur le site java.sun.com et exécuter le fichier j2sdk-1_4_2_03-windows-i586-p.exe.
Un assistant permet de configurer l'installation au travers de plusieurs étapes :
Même si ce n'est pas obligatoire pour fonctionner, il est particulièrement utile de configurer deux variables systèmes : PATH et CLASSPATH.
Dans la variable PATH, il est pratique de rajouter le chemin du répertoire bin du JDK installé pour éviter à chaque appel des commandes du JDK d'avoir à saisir leur chemin absolu.
Dans la variable CLASSPATH, il est pratique de rajouter les répertoires et les fichiers .jar qui peuvent être nécessaires lors des phases de compilation ou d'exécution, pour éviter d'avoir à les préciser à chaque fois.
Il faut télécharger sur le site de Sun et exécuter le fichier j2sdk-1_5_0-windows-i586.exe
Un assistant guide l'utilisateur pour l'installation de l'outil.
Pour faciliter l'utilisation des outils du J2SE SDK, il faut ajouter le chemin du répertoire bin contenant ces outils dans la variable Path du système.
Il est aussi utile de définir la variable d'environnement JAVA_HOME avec comme valeur le chemin d'installation du SDK.
La première chose est de décompresser le fichier téléchargé sur le site de Sun en exécutant le fichier dans un shell.
Exemple : |
[java@localhost tmp]$ sh j2sdk-1_4_2_06-linux-i586-rpm.bin
Sun Microsystems, Inc.
Binary Code License Agreement for the
JAVATM 2 SOFTWARE DEVELOPMENT KIT (J2SDK), STANDARD
EDITION, VERSION 1.4.2_X
SUN MICROSYSTEMS, INC. ("SUN") IS WILLING TO LICENSE THE
SOFTWARE IDENTIFIED BELOW TO YOU ONLY UPON THE CONDITION
THAT YOU ACCEPT ALL OF THE TERMS CONTAINED IN THIS BINARY
CODE LICENSE AGREEMENT AND SUPPLEMENTAL LICENSE TERMS
(COLLECTIVELY "AGREEMENT"). PLEASE READ THE AGREEMENT
...
Do you agree to the above license terms? [yes or no]
yes
Unpacking...
Checksumming...
0
0
Extracting...
UnZipSFX 5.40 of 28 November 1998, by Info-ZIP (Zip-Bugs@lists.wku.edu).
inflating: j2sdk-1_4_2_06-linux-i586.rpm
Done.
[java@localhost tmp]$
La décompression crée un fichier j2sdk-1_4_2_06-linux-i586.rpm. Pour installer ce package, il est nécessaire d'être root sinon son installation est impossible.
Exemple : |
[java@localhost eclipse3]$ rpm -ivh j2sdk-1_4_2_06-linux-i586.rpm
erreur: cannot open lock file ///var/lib/rpm/RPMLOCK in exclusive mode
erreur: impossible d'ouvrir la base de données Package dans /var/lib/rpm
[java@localhost eclipse3]$ su root
Password:
[root@localhost eclipse3]# rpm -ivh j2sdk-1_4_2_06-linux-i586.rpm
Préparation... ########################################### [100%]
1:j2sdk ########################################### [100%]
[root@localhost eclipse3]#
Le JDK a été installé dans le répertoire /usr/java/j2sdk1.4.2_06
Pour permettre l'utilisation par tous les utilisateurs du système, le plus simple est de créer un fichier de configuration dans le répertoire /etc/profile.d
Créez un fichier java.sh
Exemple : |
[root@localhost root]# cat java.sh
export JAVA_HOME="/usr/java/j2sdk1.4.2_06"
export PATH=$PATH:$JAVA_HOME/bin
Modifiez ses droits pour permettre son exécution
Exemple : |
[root@localhost root]# chmod 777 java.sh
[root@localhost root]# source java.sh
Si kaffe est déjà installé sur le système il est préférable de mettre le chemin vers le JDK en tête de la variable PATH
Exemple : |
[root@localhost root]# java
usage: kaffe [-options] class
Options are:
-help Print this message
-version Print version number
-fullversion Print verbose version info
-ss <size> Maximum native stack size
[root@localhost root]# cat java.sh
export JAVA_HOME="/usr/java/j2sdk1.4.2_06"
export PATH=$JAVA_HOME/bin:$PATH
Pour rendre cette modification permanente, il faut copier le fichier java.sh dans le répertoire /etc/profile.d
Exemple : |
[root@localhost root]# cp java.sh /etc/profile.d
Ainsi tous les utilisateurs qui ouvriront une nouvelle console Bash auront ces variables d'environnements positionnées pour utiliser les outils du JDK.
Exemple : |
[java@localhost java]$ echo $JAVA_HOME
/usr/java/j2sdk1.4.2_06
[java@localhost java]$ java -version
java version "1.4.2_06"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_06-b03)
Java HotSpot(TM) Client VM (build 1.4.2_06-b03, mixed mode)
[java@localhost java]$
L'installation de la documentation se fait en décompressant l'archive dans un répertoire du système par exemple /usr/java.
Exemple : |
[root@localhost local]# mv j2sdk-1_4_2-doc.zip /usr/java
[root@localhost java]# ll
total 33636
drwxr-xr-x 8 root root 4096 oct 16 22:18 j2sdk1.4.2_06/
-rwxr--r-- 1 root root 34397778 oct 18 23:39 j2sdk-1_4_2-doc.zip*
[root@localhost java]# unzip -q j2sdk-1_4_2-doc.zip
[root@localhost java]# ll
total 33640
drwxrwxr-x 8 root root 4096 aoû 15 2003 docs/
drwxr-xr-x 8 root root 4096 oct 16 22:18 j2sdk1.4.2_06/
-rwxr--r-- 1 root root 34397778 oct 18 23:39 j2sdk-1_4_2-doc.zip*
[root@localhost java]# rm j2sdk-1_4_2-doc.zip
rm: détruire fichier régulier `j2sdk-1_4_2-doc.zip'? o
[root@localhost java]# ll
total 8
drwxrwxr-x 8 root root 4096 aoû 15 2003 docs/
drwxr-xr-x 8 root root 4096 oct 16 22:18 j2sdk1.4.2_06/
[root@localhost java]#
Il est possible pour un utilisateur de créer un raccourci sur le bureau KDE en utilisant le menu contextuel créer un « nouveau/fichier/lien vers une url ... »
Un double-clic sur la nouvelle icône permet d'ouvrir directement Konqueror avec l'aide en ligne de l'API.
Télécharger et exécuter le fichier jdk-8uxxx-windows-i586.exe (ou 8uxxx est la version) à l'url https://www.oracle.com/java/technologies/downloads/.
Attention : Windows XP n'est plus supporté par Java 8. Le programme d'installation échoue lors de son exécution sous Windows XP. |
Java 8 peut être utilisé sous Windows XP mais le programme d'installation n'est pas utilisable sur cette version du système d'exploitation qui n'est plus supportée par Microsoft. Il est cependant possible de l'installer manuellement.
Il faut utiliser l'option 7-zip/extraire les fichiers sur le fichier jdk-8u5-windows-i586.exe
Le répertoire décompressé jdk-8u5-windows-i586 contient le fichier tools.zip. Il suffit d'extraire les fichiers de l'archive tools.zip dans un nouveau répertoire par exemple C:\Program Files\Java\jdk1.8.0_5\.
Exemple : |
C:\Program Files\Java\jdk1.8.0_5\jre\lib>echo %PATH%
C:\Program Files\Java\jdk1.8.0_5\bin;C:\java\apache-maven-3.1.1\bin;C:\WINDOWS\system32;
C:\WINDOWS
C:\Program Files\Java\jdk1.8.0_5\jre\lib>echo %JAVA_HOME%
C:\Program Files\Java\jdk1.8.0_5
C:\Program Files\Java\jdk1.8.0_5\jre\lib>"%JAVA_HOME%\bin\unpack200" -r charsets.pack
charsets.jar
C:\Program Files\Java\jdk1.8.0_5\jre\lib>"%JAVA_HOME%\bin\unpack200" -r deploy.pack deploy.jar
C:\Program Files\Java\jdk1.8.0_5\jre\lib>"%JAVA_HOME%\bin\unpack200" -r jsse.pack jsse.jar
C:\Program Files\Java\jdk1.8.0_5\jre\lib>"%JAVA_HOME%\bin\unpack200" -r plugin.pack plugin.jar
C:\Program Files\Java\jdk1.8.0_5\jre\lib>"%JAVA_HOME%\bin\unpack200" -r rt.packrt.jar
C:\Program Files\Java\jdk1.8.0_5\jre\lib>java -version
java version "1.8.0_05"
Java(TM) SE Runtime Environment (build 1.8.0_05-b13)
Java HotSpot(TM) Client VM (build 25.5-b02, mixed mode)
C:\Program Files\Java\jdk1.8.0_5\jre\lib>cd ext
C:\Program Files\Java\jdk1.8.0_5\jre\lib\ext>"%JAVA_HOME%\bin\unpack200" -r jfxrt.pack
jfxrt.jar
C:\Documents and Settings\admin>cd "C:\Program Files\Java\jdk1.8.0_5\jre\lib\ext"
C:\Program Files\Java\jdk1.8.0_5\jre\lib\ext>dir *.pack
Le volume dans le lecteur C n'a pas de nom.
Le numéro de série du volume est 1C28-9F3C
Répertoire de C:\Program Files\Java\jdk1.8.0_5\jre\lib\ext
18/03/2014 03:15 4 926 375 jfxrt.pack
18/03/2014 03:15 1 339 473 localedata.pack
2 fichier(s) 6 265 848 octets
0 Rép(s) 24 532 004 864 octets libres
C:\Program Files\Java\jdk1.8.0_5\jre\lib\ext>"%JAVA_HOME%\bin\unpack200" -r jfxrt.pack
jfxrt.jar
C:\Program Files\Java\jdk1.8.0_5\jre\lib\ext>"%JAVA_HOME%\bin\unpack200" -r localedata.pack
localedata.jar
C:\Program Files\Java\jdk1.8.0_5\jre\lib\ext>cd "C:\Program Files\Java\jdk1.8.0_5\lib"
C:\Program Files\Java\jdk1.8.0_5\lib>"%JAVA_HOME%\bin\unpack200" -r tools.pack tools.jar
C:\Program Files\Java\jdk1.8.0_5\jre\lib\ext>cd "C:\Program Files\Java\jdk1.8.0_5\lib"
C:\Program Files\Java\jdk1.8.0_5\lib>"%JAVA_HOME%\bin\unpack200" -r tools.pack tools.jar
Pour utiliser certains outils comme Netbeans 8.0, il est nécessaire de convertir les autres fichiers, notamment jfxrt.pack et tools.pack,en fichier jar.
Attention : cette solution installe le JDK mais n'installe pas les plugins dans les navigateurs.
L'installation d'une distribution Java sur un Raspberry Pi 4 peut se faire de différente manière. Cela dépend de la distribution Java choisie, car plusieurs distribution sont disponibles sur ARM 32 et 64 bits. Le plus simple est d'installer les distributions proposées dans le gestionnaire de packages apt.
Pour vérifier si Java est présent, il faut faut exécuter la commande :
Exemple : |
jm@rpi4-ubuntu:~$ java -version
Command 'java' not found, but can be installed with:
sudo apt install default-jre # version 2:1.11-72, or
sudo apt install openjdk-11-jre-headless # version 11.0.9.1+1-0ubuntu1~20.10
sudo apt install openjdk-8-jre-headless # version 8u275-b01-0ubuntu1~20.10
sudo apt install openjdk-13-jre-headless # version 13.0.4+8-1
sudo apt install openjdk-14-jre-headless # version 14.0.2+12-1
sudo apt install openjdk-15-jre-headless # version 15+36-1
La première étape consiste à mettre à jour l'index des packages :
Exemple : |
jm@rpi4-ubuntu:~$ sudo apt update
[sudo] password for jm:
La version par défaut au moment de l'exécution de la commande est un OpenJDK 11. Le JRE par défaut s'installe en installant le package default-jre.
Exemple : |
jm@rpi4-ubuntu:~$ sudo apt install default-jre
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances
Lecture des informations d'état... Fait
Les paquets suivants ont été installés automatiquement et ne sont plus nécessaires :
cryptsetup-bin dctrl-tools dmeventd dmraid dpkg-repack efibootmgr gir1.2-timezonemap-1.0 gir1.
2-xkl-1.0 grub-common grub-efi-arm64 grub-efi-arm64-bin grub-efi-arm64-signed grub2-common kpa
rtx kpartx-boot libdebian-installer4 libdevmapper-event1.02.1 libdmraid1.0.0.rc16 liblvm2cmd2.
03 libreadline5 libtimezonemap-data libtimezonemap1 lvm2 os-prober python3-icu python3-pam rda
te thin-provisioning-tools
Veuillez utiliser « sudo apt autoremove » pour les supprimer.
Les paquets supplémentaires suivants seront installés :
ca-certificates-java default-jre-headless fonts-dejavu-extra java-common libatk-wrapper-java
libatk-wrapper-java-jni openjdk-11-jre openjdk-11-jre-headless
Paquets suggérés :
fonts-ipafont-gothic fonts-ipafont-mincho fonts-wqy-microhei | fonts-wqy-zenhei
Les NOUVEAUX paquets suivants seront installés :
ca-certificates-java default-jre default-jre-headless fonts-dejavu-extra java-common libatk-wr
apper-java libatk-wrapper-java-jni openjdk-11-jre openjdk-11-jre-headless
0 mis à jour, 9 nouvellement installés, 0 à enlever et 0 non mis à jour.
Il est nécessaire de prendre 39,0 Mo dans les archives.
Après cette opération, 177 Mo d'espace disque supplémentaires seront utilisés.
Souhaitez-vous continuer ? [O/n] O
Réception de :1 http://ports.ubuntu.com/ubuntu-ports groovy/main arm64 java-common all 0.72
[6?816 B]
Réception de :2 http://ports.ubuntu.com/ubuntu-ports groovy-updates/main arm64 openjdk-11-jre-
headless arm64 11.0.9.1+1-0ubuntu1~20.10 [36,9 MB]
Réception de :3 http://ports.ubuntu.com/ubuntu-ports groovy/main arm64 default-jre-headless ar
m64 2:1.11-72 [3?192 B]
...
Traitement des actions différées (« triggers ») pour fontconfig (2.13.1-2ubuntu3) ...
Traitement des actions différées (« triggers ») pour desktop-file-utils (0.24-1ubuntu4) ...
Traitement des actions différées (« triggers ») pour mime-support (3.64ubuntu1) ...
Traitement des actions différées (« triggers ») pour hicolor-icon-theme (0.17-2) ...
Traitement des actions différées (« triggers ») pour gnome-menus (3.36.0-1ubuntu1) ...
Traitement des actions différées (« triggers ») pour man-db (2.9.3-2) ...
Traitement des actions différées (« triggers ») pour ca-certificates (20201027ubuntu0.20.10.1)
Updating certificates in /etc/ssl/certs...
0 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.
Done.
La vérification de la version installée se fait en executant la commande :
Exemple : |
jm@rpi4-ubuntu:~$ java -version
openjdk version "11.0.9.1" 2020-11-04
OpenJDK Runtime Environment (build 11.0.9.1+1-Ubuntu-0ubuntu1.20.10)
OpenJDK 64-Bit Server VM (build 11.0.9.1+1-Ubuntu-0ubuntu1.20.10, mixed mode)
jm@rpi4-ubuntu:~$
Le JDK par défaut s'installe en installant le package default-jdk.
Exemple : |
jm@rpi4-ubuntu:~$ sudo apt install default-jdk
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances
Lecture des informations d'état... Fait
Les paquets suivants ont été installés automatiquement et ne sont plus nécessaires :
cryptsetup-bin dctrl-tools dmeventd dmraid dpkg-repack efibootmgr gir1.2-timezonemap-1.0 gir1.
2-xkl-1.0 grub-common grub-efi-arm64 grub-efi-arm64-bin grub-efi-arm64-signed grub2-common kpa
rtx kpartx-boot libdebian-installer4 libdevmapper-event1.02.1 libdmraid1.0.0.rc16 liblvm2cmd2.
03 libreadline5 libtimezonemap-data libtimezonemap1 lvm2 os-prober python3-icu python3-pam rda
te thin-provisioning-tools
Veuillez utiliser « sudo apt autoremove » pour les supprimer.
Les paquets supplémentaires suivants seront installés :
default-jdk-headless libice-dev libpthread-stubs0-dev libsm-dev libx11-dev libxau-dev libxcb1-
dev libxdmcp-dev libxt-dev openjdk-11-jdk openjdk-11-jdk-headless x11proto-core-dev x11proto-d
ev xorg-sgml-doctools xtrans-dev
Paquets suggérés :
libice-doc libsm-doc libx11-doc libxcb-doc libxt-doc openjdk-11-demo openjdk-11-source visualvm
Les NOUVEAUX paquets suivants seront installés :
default-jdk default-jdk-headless libice-dev libpthread-stubs0-dev libsm-dev libx11-dev libxau-
dev libxcb1-dev libxdmcp-dev libxt-dev openjdk-11-jdk openjdk-11-jdk-headless x11proto-core-de
v x11proto-dev xorg-sgml-doctools xtrans-dev
0 mis à jour, 16 nouvellement installés, 0 à enlever et 0 non mis à jour.
Il est nécessaire de prendre 219 Mo dans les archives.
Après cette opération, 234 Mo d'espace disque supplémentaires seront utilisés.
Souhaitez-vous continuer ? [O/n] O
Réception de :1 http://ports.ubuntu.com/ubuntu-ports groovy-updates/main arm64 openjdk-11-jdk-
headless arm64 11.0.9.1+1-0ubuntu1~20.10 [215 MB]
Réception de :2 http://ports.ubuntu.com/ubuntu-ports groovy/main arm64 default-jdk-headless ar
m64 2:1.11-72 [1?140 B]
Réception de :3 http://ports.ubuntu.com/ubuntu-ports groovy-updates/main arm64 openjdk-11-jdk
arm64 11.0.9.1+1-0ubuntu1~20.10 [2?048 kB]
...
update-alternatives: utilisation de « /usr/lib/jvm/java-11-openjdk-arm64/bin/jar » pour fourni
r « /usr/bin/jar » (jar) en mode automatique
update-alternatives: utilisation de « /usr/lib/jvm/java-11-openjdk-arm64/bin/jarsigner » pour
fournir « /usr/bin/jarsigner » (jarsigner) en mode automatique
update-alternatives: utilisation de « /usr/lib/jvm/java-11-openjdk-arm64/bin/javac » pour four
nir « /usr/bin/javac » (javac) en mode automatique
update-alternatives: utilisation de « /usr/lib/jvm/java-11-openjdk-arm64/bin/javadoc » pour fo
urnir « /usr/bin/javadoc » (javadoc) en mode automatique
update-alternatives: utilisation de « /usr/lib/jvm/java-11-openjdk-arm64/bin/javap » pour four
nir « /usr/bin/javap » (javap) en mode automatique
update-alternatives: utilisation de « /usr/lib/jvm/java-11-openjdk-arm64/bin/jcmd » pour fourn
ir « /usr/bin/jcmd » (jcmd) en mode automatique
update-alternatives: utilisation de « /usr/lib/jvm/java-11-openjdk-arm64/bin/jdb » pour fourni
r « /usr/bin/jdb » (jdb) en mode automatique
update-alternatives: utilisation de « /usr/lib/jvm/java-11-openjdk-arm64/bin/jdeprscan » pour
fournir « /usr/bin/jdeprscan » (jdeprscan) en mode automatique
update-alternatives: utilisation de « /usr/lib/jvm/java-11-openjdk-arm64/bin/jdeps » pour four
nir « /usr/bin/jdeps » (jdeps) en mode automatique
update-alternatives: utilisation de « /usr/lib/jvm/java-11-openjdk-arm64/bin/jimage » pour fou
rnir « /usr/bin/jimage » (jimage) en mode automatique
update-alternatives: utilisation de « /usr/lib/jvm/java-11-openjdk-arm64/bin/jinfo » pour four
nir « /usr/bin/jinfo » (jinfo) en mode automatique
update-alternatives: utilisation de « /usr/lib/jvm/java-11-openjdk-arm64/bin/jlink » pour four
nir « /usr/bin/jlink » (jlink) en mode automatique
update-alternatives: utilisation de « /usr/lib/jvm/java-11-openjdk-arm64/bin/jmap » pour fourn
ir « /usr/bin/jmap » (jmap) en mode automatique
update-alternatives: utilisation de « /usr/lib/jvm/java-11-openjdk-arm64/bin/jmod » pour fourn
ir « /usr/bin/jmod » (jmod) en mode automatique
update-alternatives: utilisation de « /usr/lib/jvm/java-11-openjdk-arm64/bin/jps » pour fourni
r « /usr/bin/jps » (jps) en mode automatique
update-alternatives: utilisation de « /usr/lib/jvm/java-11-openjdk-arm64/bin/jrunscript » pour
fournir « /usr/bin/jrunscript » (jrunscript) en mode automatique
update-alternatives: utilisation de « /usr/lib/jvm/java-11-openjdk-arm64/bin/jshell » pour fou
rnir « /usr/bin/jshell » (jshell) en mode automatique
update-alternatives: utilisation de « /usr/lib/jvm/java-11-openjdk-arm64/bin/jstack » pour fou
rnir « /usr/bin/jstack » (jstack) en mode automatique
update-alternatives: utilisation de « /usr/lib/jvm/java-11-openjdk-arm64/bin/jstat » pour four
nir « /usr/bin/jstat » (jstat) en mode automatique
update-alternatives: utilisation de « /usr/lib/jvm/java-11-openjdk-arm64/bin/jstatd » pour fou
rnir « /usr/bin/jstatd » (jstatd) en mode automatique
update-alternatives: utilisation de « /usr/lib/jvm/java-11-openjdk-arm64/bin/rmic » pour fourn
ir « /usr/bin/rmic » (rmic) en mode automatique
update-alternatives: utilisation de « /usr/lib/jvm/java-11-openjdk-arm64/bin/serialver » pour
fournir « /usr/bin/serialver » (serialver) en mode automatique
update-alternatives: utilisation de « /usr/lib/jvm/java-11-openjdk-arm64/bin/jaotc » pour four
nir « /usr/bin/jaotc » (jaotc) en mode automatique
update-alternatives: utilisation de « /usr/lib/jvm/java-11-openjdk-arm64/bin/jhsdb » pour four
nir « /usr/bin/jhsdb » (jhsdb) en mode automatique
Paramétrage de libpthread-stubs0-dev:arm64 (0.4-1) ...
Paramétrage de xtrans-dev (1.4.0-1) ...
Paramétrage de default-jdk-headless (2:1.11-72) ...
Paramétrage de openjdk-11-jdk:arm64 (11.0.9.1+1-0ubuntu1~20.10) ...
update-alternatives: utilisation de « /usr/lib/jvm/java-11-openjdk-arm64/bin/jconsole » pour f
ournir « /usr/bin/jconsole » (jconsole) en mode automatique
Paramétrage de xorg-sgml-doctools (1:1.11-1) ...
Paramétrage de default-jdk (2:1.11-72) ...
Traitement des actions différées (« triggers ») pour man-db (2.9.3-2) ...
Traitement des actions différées (« triggers ») pour sgml-base (1.30) ...
Paramétrage de x11proto-dev (2020.1-1) ...
Paramétrage de libxau-dev:arm64 (1:1.0.9-0ubuntu1) ...
Paramétrage de libice-dev:arm64 (2:1.0.10-1) ...
Paramétrage de libsm-dev:arm64 (2:1.2.3-1) ...
Paramétrage de libxdmcp-dev:arm64 (1:1.1.3-0ubuntu1) ...
Paramétrage de x11proto-core-dev (2020.1-1) ...
Paramétrage de libxcb1-dev:arm64 (1.14-2) ...
Paramétrage de libx11-dev:arm64 (2:1.6.12-1) ...
Paramétrage de libxt-dev:arm64 (1:1.2.0-1) ...
jm@rpi4-ubuntu:~$
La vérification de la version du JDK installée se fait en executant la commande :
Exemple : |
jm@rpi4-ubuntu:~$ javac -version
javac 11.0.9.1
jm@rpi4-ubuntu:~$
Par défaut pour une Ubuntu 20.10, le repository standard propose plusieurs versions d'OpenJDK.
Pour obtenir la liste des version disponibles, il faut faire une recherche sur openjdk dans les packages.
Exemple : |
jm@rpi4-ubuntu:~$ apt search openjdk
Pour installer une version parmis celles de la liste, il suffit d'exécuter la commande
pour le package de la version concernée
jm@rpi4-ubuntu:~$ sudo apt install openjdk-8-jdk
jm@rpi4-ubuntu:~$ sudo apt install openjdk-11-jdk
jm@rpi4-ubuntu:~$ sudo apt install openjdk-13-jdk
jm@rpi4-ubuntu:~$ sudo apt install openjdk-14-jdk
L'installation d'un OpenJDK version 8 se fait en installant le package openjdk-8-jdk
Exemple : |
jm@rpi4-ubuntu:~$ sudo apt-get install openjdk-8-jdk
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances
Lecture des informations d'état... Fait
Les paquets suivants ont été installés automatiquement et ne sont plus nécessaires :
cryptsetup-bin dctrl-tools dmeventd dmraid dpkg-repack efibootmgr gir1.2-timezonemap-1.0 gir1.
2-xkl-1.0 grub-common grub-efi-arm64 grub-efi-arm64-bin grub-efi-arm64-signed grub2-common kpa
rtx kpartx-boot libdebian-installer4 libdevmapper-event1.02.1 libdmraid1.0.0.rc16 liblvm2cmd2.
03 libreadline5 libtimezonemap-data libtimezonemap1 lvm2 os-prober python3-icu python3-pam rda
te thin-provisioning-tools
Veuillez utiliser « sudo apt autoremove » pour les supprimer.
Les paquets supplémentaires suivants seront installés :
openjdk-8-jdk-headless openjdk-8-jre openjdk-8-jre-headless
Paquets suggérés :
openjdk-8-demo openjdk-8-source visualvm icedtea-8-plugin fonts-ipafont-gothic fonts-ipafont-m
incho fonts-wqy-microhei fonts-wqy-zenhei
Les NOUVEAUX paquets suivants seront installés :
openjdk-8-jdk openjdk-8-jdk-headless openjdk-8-jre openjdk-8-jre-headless
0 mis à jour, 4 nouvellement installés, 0 à enlever et 6 non mis à jour.
Il est nécessaire de prendre 40,3 Mo dans les archives.
Après cette opération, 147 Mo d'espace disque supplémentaires seront utilisés.
Souhaitez-vous continuer ? [O/n] O
Réception de :1 http://ports.ubuntu.com/ubuntu-ports groovy-updates/universe arm64 openjdk-8-j
re-headless arm64 8u275-b01-0ubuntu1~20.10 [27,8 MB]
Réception de :2 http://ports.ubuntu.com/ubuntu-ports groovy-updates/universe arm64 openjdk-8-j
re arm64 8u275-b01-0ubuntu1~20.10 [65,5 kB]
Réception de :3 http://ports.ubuntu.com/ubuntu-ports groovy-updates/universe arm64 openjdk-8-j
dk-headless arm64 8u275-b01-0ubuntu1~20.10 [8?291 kB]
Réception de :4 http://ports.ubuntu.com/ubuntu-ports groovy-updates/universe arm64 openjdk-8-j
dk arm64 8u275-b01-0ubuntu1~20.10 [4?116 kB]
40,3 Mo réceptionnés en 7s (5?409 ko/s)
Sélection du paquet openjdk-8-jre-headless:arm64 précédemment désélectionné.
(Lecture de la base de données... 169868 fichiers et répertoires déjà installés.)
Préparation du dépaquetage de .../openjdk-8-jre-headless_8u275-b01-0ubuntu1~20.10_arm64.deb ...
Dépaquetage de openjdk-8-jre-headless:arm64 (8u275-b01-0ubuntu1~20.10) ...
Sélection du paquet openjdk-8-jre:arm64 précédemment désélectionné.
Préparation du dépaquetage de .../openjdk-8-jre_8u275-b01-0ubuntu1~20.10_arm64.deb ...
Dépaquetage de openjdk-8-jre:arm64 (8u275-b01-0ubuntu1~20.10) ...
Sélection du paquet openjdk-8-jdk-headless:arm64 précédemment désélectionné.
Préparation du dépaquetage de .../openjdk-8-jdk-headless_8u275-b01-0ubuntu1~20.10_arm64.deb ...
Dépaquetage de openjdk-8-jdk-headless:arm64 (8u275-b01-0ubuntu1~20.10) ...
Sélection du paquet openjdk-8-jdk:arm64 précédemment désélectionné.
Préparation du dépaquetage de .../openjdk-8-jdk_8u275-b01-0ubuntu1~20.10_arm64.deb ...
Dépaquetage de openjdk-8-jdk:arm64 (8u275-b01-0ubuntu1~20.10) ...
Paramétrage de openjdk-8-jre-headless:arm64 (8u275-b01-0ubuntu1~20.10) ...
update-alternatives: utilisation de « /usr/lib/jvm/java-8-openjdk-arm64/jre/bin/orbd » pour fo
urnir « /usr/bin/orbd » (orbd) en mode automatique
update-alternatives: utilisation de « /usr/lib/jvm/java-8-openjdk-arm64/jre/bin/servertool » p
our fournir « /usr/bin/servertool » (servertool) en mode automatique
update-alternatives: utilisation de « /usr/lib/jvm/java-8-openjdk-arm64/jre/bin/tnameserv » po
ur fournir « /usr/bin/tnameserv » (tnameserv) en mode automatique
Paramétrage de openjdk-8-jre:arm64 (8u275-b01-0ubuntu1~20.10) ...
update-alternatives: utilisation de « /usr/lib/jvm/java-8-openjdk-arm64/jre/bin/policytool » p
our fournir « /usr/bin/policytool » (policytool) en mode automatique
Paramétrage de openjdk-8-jdk-headless:arm64 (8u275-b01-0ubuntu1~20.10) ...
update-alternatives: utilisation de « /usr/lib/jvm/java-8-openjdk-arm64/bin/clhsdb » pour four
nir « /usr/bin/clhsdb » (clhsdb) en mode automatique
update-alternatives: utilisation de « /usr/lib/jvm/java-8-openjdk-arm64/bin/extcheck » pour fo
urnir « /usr/bin/extcheck » (extcheck) en mode automatique
update-alternatives: utilisation de « /usr/lib/jvm/java-8-openjdk-arm64/bin/hsdb » pour fourni
r « /usr/bin/hsdb » (hsdb) en mode automatique
update-alternatives: utilisation de « /usr/lib/jvm/java-8-openjdk-arm64/bin/idlj » pour fourni
r « /usr/bin/idlj » (idlj) en mode automatique
update-alternatives: utilisation de « /usr/lib/jvm/java-8-openjdk-arm64/bin/javah » pour fourn
ir « /usr/bin/javah » (javah) en mode automatique
update-alternatives: utilisation de « /usr/lib/jvm/java-8-openjdk-arm64/bin/jhat » pour fourni
r « /usr/bin/jhat » (jhat) en mode automatique
update-alternatives: utilisation de « /usr/lib/jvm/java-8-openjdk-arm64/bin/jsadebugd » pour f
ournir « /usr/bin/jsadebugd » (jsadebugd) en mode automatique
update-alternatives: utilisation de « /usr/lib/jvm/java-8-openjdk-arm64/bin/native2ascii » pou
r fournir « /usr/bin/native2ascii » (native2ascii) en mode automatique
update-alternatives: utilisation de « /usr/lib/jvm/java-8-openjdk-arm64/bin/schemagen » pour f
ournir « /usr/bin/schemagen » (schemagen) en mode automatique
update-alternatives: utilisation de « /usr/lib/jvm/java-8-openjdk-arm64/bin/wsgen » pour fourn
ir « /usr/bin/wsgen » (wsgen) en mode automatique
update-alternatives: utilisation de « /usr/lib/jvm/java-8-openjdk-arm64/bin/wsimport » pour fo
urnir « /usr/bin/wsimport » (wsimport) en mode automatique
update-alternatives: utilisation de « /usr/lib/jvm/java-8-openjdk-arm64/bin/xjc » pour fournir
« /usr/bin/xjc » (xjc) en mode automatique
Paramétrage de openjdk-8-jdk:arm64 (8u275-b01-0ubuntu1~20.10) ...
update-alternatives: utilisation de « /usr/lib/jvm/java-8-openjdk-arm64/bin/appletviewer » pou
r fournir « /usr/bin/appletviewer » (appletviewer) en mode automatique
Traitement des actions différées (« triggers ») pour mime-support (3.64ubuntu1) ...
Traitement des actions différées (« triggers ») pour hicolor-icon-theme (0.17-2) ...
Traitement des actions différées (« triggers ») pour gnome-menus (3.36.0-1ubuntu1) ...
Traitement des actions différées (« triggers ») pour libc-bin (2.32-0ubuntu3) ...
Traitement des actions différées (« triggers ») pour desktop-file-utils (0.24-1ubuntu4) ...
jm@rpi4-ubuntu:~$
Certaines applications recherchent la variable d'environnement JAVA_HOME pour connaître la localisation du JDK.
Exemple : |
jm@rpi4-ubuntu:~$ export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-arm64
jm@rpi4-ubuntu:~$ echo $JAVA_HOME
/usr/lib/jvm/java-8-openjdk-arm64
jm@rpi4-ubuntu:~$
Il est possible de configurer la variable d'environnement JAVA_HOME avec un chemin en dur au démarrage du système en modifiant le fichier /etc/environment
Exemple : |
jm@rpi4-ubuntu:~$ sudo nano /etc/environment
Il suffit de rajouter la ligne
Exemple : |
JAVA_HOME="/usr/lib/jvm/java-11-openjdk-amd64"
Il faut enregistrer les modifications et appliquer les modifications dans la session courante
jm@rpi4-ubuntu:~$ source /etc/environment
jm@rpi4-ubuntu:~$
Il est possible de définir la variable en obtenant dynamiquement le chemin de la commande java. C'est pratique après avoir changer les alternatives pour les commandes du JDK ou du JRE.
Exemple : |
jm@rpi4-ubuntu:~$ export JAVA_HOME=$(dirname $(dirname $(readlink -f $(which java))))
jm@rpi4-ubuntu:~$ echo $JAVA_HOME
/usr/lib/jvm/java-11-openjdk-arm64
Il est possible de définir la variable JAVA_HOME avec comme valeur un chemin en dur dans le fichier /etc/environment pour définir la valeur par défaut.
Il est possible de définir dynamiquement dans le fichier ~/.bashrc en lui ajoutant la ligne
Exemple : |
export JAVA_HOME=$(dirname $(dirname $(readlink -f $(which java))))
Plusieurs sont utilisables pour configurer la version de Java à utiliser par défaut.
Les alternatives sont une solution proposée par les systèmes reposant sur une Debian pour plusieurs programmes qui remplissent des fonctions identiques ou similaires soient listés comme des implémentations alternatives qui sont installées simultanément avec une implémentation particulière désignée comme implémentation par défaut.
Les alternatives sont gérées avec la commande update-alternatives
Elle permet de sélectionner une alternative (une version particulière) pour une commande. La commande est alors un alias vers la commande correspondante de la version souhaitée.
Exemple : |
jm@rpi4-ubuntu:~$ java -version
openjdk version "1.8.0_275"
OpenJDK Runtime Environment (build 1.8.0_275-8u275-b01-0ubuntu1~20.10-b01)
OpenJDK 64-Bit Server VM (build 25.275-b01, mixed mode)
jm@rpi4-ubuntu:~$ javac -version
javac 1.8.0_275
jm@rpi4-ubuntu:~$ sudo update-alternatives --config java
Il existe 3 choix pour l'alternative java (qui fournit /usr/bin/java).
Sélection Chemin Priorité �tat
------------------------------------------------------------
0 /usr/lib/jvm/java-15-openjdk-arm64/bin/java 1511 mode automatique
1 /usr/lib/jvm/java-11-openjdk-arm64/bin/java 1111 mode manuel
2 /usr/lib/jvm/java-15-openjdk-arm64/bin/java 1511 mode manuel
* 3 /usr/lib/jvm/java-8-openjdk-arm64/jre/bin/java 1081 mode manuel
Appuyez sur <Entrée> pour conserver la valeur par défaut[*] ou choisissez le numéro sélectionné
:2
update-alternatives: utilisation de « /usr/lib/jvm/java-15-openjdk-arm64/bin/java » pour fourn
ir « /usr/bin/java » (java) en mode manuel
jm@rpi4-ubuntu:~$ java -version
openjdk version "15" 2020-09-15
OpenJDK Runtime Environment (build 15+36-Ubuntu-1)
OpenJDK 64-Bit Server VM (build 15+36-Ubuntu-1, mixed mode, sharing)
jm@rpi4-ubuntu:~$ javac -version
javac 1.8.0_275
Il faut donc l'utiliser sur chaque commande concernée, notamment java et javac et éventuellement les autres commandes utilisée du JRE ou du JDK : javadoc, jlink, jarsigner, ...
Si une seule version de Java est installée, il n'y a rien à faire
Exemple : |
jm@rpi4-ubuntu:~$ sudo update-alternatives --config java
Il n'existe qu'une « alternative » dans le groupe de liens java (qui fournit /usr/bin/java) :
/usr/lib/jvm/java-11-openjdk-arm64/bin/java
Rien à configurer.
jm@rpi4-ubuntu:~$
Pour obtenir les différentes installations, il faut utiliser l'option -l ou --list
Exemple : |
jm@rpi4-ubuntu:~$ update-java-alternatives --list
java-1.11.0-openjdk-arm64 1111 /usr/lib/jvm/java-1.11.0-openjdk-arm64
java-1.15.0-openjdk-arm64 1511 /usr/lib/jvm/java-1.15.0-openjdk-arm64
java-1.8.0-openjdk-arm64 1081 /usr/lib/jvm/java-1.8.0-openjdk-arm64
jm@rpi4-ubuntu:~$ update-java-alternatives -l
java-1.11.0-openjdk-arm64 1111 /usr/lib/jvm/java-1.11.0-openjdk-arm64
java-1.15.0-openjdk-arm64 1511 /usr/lib/jvm/java-1.15.0-openjdk-arm64
java-1.8.0-openjdk-arm64 1081 /usr/lib/jvm/java-1.8.0-openjdk-arm64
Pour définir la version par défaut à utiliser, il faut utiliser l'option -s suivi du nom de la version souhaitée (celle qui apprarait en premier dans la liste). La commande doit être exécutée avec les privilèges root
Exemple : |
jm@rpi4-ubuntu:~$ update-java-alternatives -s java-1.8.0-openjdk-arm64
update-java-alternatives: no root privileges
jm@rpi4-ubuntu:~$ sudo update-java-alternatives -s java-1.8.0-openjdk-arm64
[sudo] password for jm:
update-alternatives: erreur: pas d'alternatives pour mozilla-javaplugin.so
update-java-alternatives: plugin alternative does not exist: /usr/lib/jvm/java-8-openjdk-arm64
/jre/lib/aarch64/IcedTeaPlugin.so
jm@rpi4-ubuntu:~$ java -version
openjdk version "1.8.0_275"
OpenJDK Runtime Environment (build 1.8.0_275-8u275-b01-0ubuntu1~20.10-b01)
OpenJDK 64-Bit Server VM (build 25.275-b01, mixed mode)
jm@rpi4-ubuntu:~$ javac -version
javac 1.8.0_275
L'avantage de cette commande est de changer les alternatives pour les commandes en une seule instructions
Exemple : |
jm@rpi4-ubuntu:~$ java -version
openjdk version "15" 2020-09-15
OpenJDK Runtime Environment (build 15+36-Ubuntu-1)
OpenJDK 64-Bit Server VM (build 15+36-Ubuntu-1, mixed mode, sharing)
jm@rpi4-ubuntu:~$ javac -version
javac 1.8.0_275
jm@rpi4-ubuntu:~$ update-java-alternatives -s java-1.11.0-openjdk-arm64
update-java-alternatives: no root privileges
jm@rpi4-ubuntu:~$ sudo update-java-alternatives -s java-1.11.0-openjdk-arm64
update-alternatives: erreur: pas d'alternatives pour mozilla-javaplugin.so
jm@rpi4-ubuntu:~$ java -version
openjdk version "11.0.9.1" 2020-11-04
OpenJDK Runtime Environment (build 11.0.9.1+1-Ubuntu-0ubuntu1.20.10)
OpenJDK 64-Bit Server VM (build 11.0.9.1+1-Ubuntu-0ubuntu1.20.10, mixed mode)
jm@rpi4-ubuntu:~$ javac -version
javac 11.0.9.1
Il est possible de définir un script pour chaque version souhaitée qui change les alternatives et définit la variable JAVA_HOME
Exemple /opt/java/utils/java8.sh
Exemple : |
sudo update-java-alternatives -s java-1.8.0-openjdk-arm64
export JAVA_HOME=$(dirname $(dirname $(readlink -f $(which java))))
export PATH=$PATH:$JAVA_HOME
java -version
Exemple /opt/java/utils/java11.sh
Exemple : |
sudo update-java-alternatives -s java-1.11.0-openjdk-arm64
export JAVA_HOME=$(dirname $(dirname $(readlink -f $(which java))))
export PATH=$PATH:$JAVA_HOME
java -version
Ces fichiers doivent être créer avec les privilèges root. Il est possible de définir des alias dans le fichier ~/.bash_aliases
Exemple : |
alias java8='source /opt/java/utils/java8.sh'
alias java11='source /opt/java/utils/java11.sh'
Pour prendre en compte les modifications, il faut rédemmarer sa session ou exécuter la commande
Exemple : |
jm@rpi4-ubuntu:~$ source ~/.bashrc
jm@rpi4-ubuntu:~$
Il suffit alors d'invoquer le script relatif à la version à utiliser
Exemple : |
jm@rpi4-ubuntu:~$ java8
update-alternatives: erreur: pas d'alternatives pour mozilla-javaplugin.so
update-java-alternatives: plugin alternative does not exist: /usr/lib/jvm/java-8-openjdk-arm64
/jre/lib/aarch64/IcedTeaPlugin.so
openjdk version "1.8.0_275"
OpenJDK Runtime Environment (build 1.8.0_275-8u275-b01-0ubuntu1~20.10-b01)
OpenJDK 64-Bit Server VM (build 25.275-b01, mixed mode)
jm@rpi4-ubuntu:~$ echo $JAVA_HOME
/usr/lib/jvm/java-8-openjdk-arm64/jre
jm@rpi4-ubuntu:~$ java11
update-alternatives: erreur: pas d'alternatives pour mozilla-javaplugin.so
openjdk version "11.0.9.1" 2020-11-04
OpenJDK Runtime Environment (build 11.0.9.1+1-Ubuntu-0ubuntu1.20.10)
OpenJDK 64-Bit Server VM (build 11.0.9.1+1-Ubuntu-0ubuntu1.20.10, mixed mode)
jm@rpi4-ubuntu:~$ echo $JAVA_HOME
/usr/lib/jvm/java-11-openjdk-arm64
jm@rpi4-ubuntu:~$
Développons en Java v 2.40 Copyright (C) 1999-2023 Jean-Michel DOUDOUX. |