Oracle annonce la sortie officielle de Java 11 :
Tour d'horizon des principales nouveautés de cette version LTS

Le , par Michael Guilloux, Chroniqueur Actualités
Oracle a annoncé mardi la disponibilité générale de Java 11, conformément à sa nouvelle cadence de publication de six mois adoptée il y a un an avec Java 9. Avec sa nouvelle cadence, quand une nouvelle version de Java est disponible, la version précédente va immédiatement cesser de recevoir des mises à jour publiques. C'est ce qui fait d'ailleurs que Java 11 est une mise à jour importante, car il s'agit de la première version LTS (bénéficiant d'un support à long terme) depuis qu'Oracle a décidé de sortir deux versions de Java par an. Elle est donc destinée aux utilisateurs qui privilégient la stabilité à un accès rapide aux nouvelles fonctionnalités.

Pour en venir aux nouveautés, Java 11 ne fait pas moins que les versions précédentes. Cette version vient en effet avec un bon lot de nouveautés et de nombreux changements que les développeurs ne doivent pas ignorer.

Dans Java 11, une nouvelle API HTTP fait son apparition. En fait, elle n'est pas tout à fait nouvelle, puisqu'elle a été introduite dans le JDK 9 (en incubation) et mise à jour dans le JDK 10. L'API HTTP a été standardisée dans Java 11. Dans le cadre de ce travail, l'API précédemment incubée, qui se trouvait dans le package jdk.incubator.http, a été supprimée. Les codes qui utilisent les types du package jdk.incubator.http devraient donc être mis à jour pour importer les types HTTP à partir de java.net.http.

Java 11 met également à jour les API de plateforme existantes pour prendre en charge la version 10.0.0 du standard Unicode. Après le JDK 10, qui supportait Unicode 8.0.0, le JDK 11 combine en effet les versions 9.0.0 et 10.0.0 d'Unicode qui incluent 16 018 nouveaux caractères, 18 nouveaux blocs et 10 nouveaux scripts.

Comme autre nouveauté, notons l'ajout du Z Garbage Collector, également appelé ZGC, un ramasse-miettes scalable à faible latence (en phase expérimentale). Il est conçu pour répondre à un certain nombre d'objectifs comme : des temps de pause qui ne dépassent pas les 10 ms ; et gérer des tas allant de quelques centaines de mégaoctets à plusieurs téraoctets. Précisons en passant que le tas est l'un des deux segments de mémoire utilisés lors de l'allocation dynamique de mémoire durant l'exécution d'un programme informatique. ZGC n'est pour le moment disponible que sous Linux/x64.

Au nombre des nouveautés, soulignons aussi que le nom de type réservé var peut maintenant être utilisé lors de la déclaration des paramètres formels d'une expression lambda. Cette nouveauté s'appuie sur la capacité de Java SE 10 à utiliser var pour la déclaration de variables locales. Entre autres nouvelles fonctionnalités, avec Java 11, il sera possible de lancer des programmes fournis sous la forme d’un fichier unique de code source Java.


Côté sécurité, Java 11 implémente les algorithmes de chiffrement ChaCha20 et Poly1305, mais aussi TLS 1.3, la dernière version du protocole de sécurisation des échanges sur Internet. On notera du côté des fonctionnalités obsolètes la suppression des modules Java EE et CORBA de la plateforme Java SE et du JDK. Ces modules étaient déclarés obsolètes depuis Java SE 9. Le moteur JavaScript Nashorn a été également déprécié dans Java 11. Comme lui, les outils pack200, unpack200 et l'API Pack200 dans java.util.jar sont désormais obsolètes.

Si nous sommes loin de la liste exhaustive des changements introduits dans Java 11, on peut terminer sur des informations que les développeurs devraient savoir en utilisant Java 11. D'abord, les Applets et la plateforme de déploiement Web Start, obsolètes depuis Java 9, ont été supprimées dans cette nouvelle version. Il est aussi utile de rappeler que JavaFX n'est plus inclus dans le JDK. Il est maintenant disponible en téléchargement séparé depuis openjfx.io.

Stephen Colebourne met en garde contre le téléchargement du JDK Oracle

Si Java 11 est maintenant disponible, Stephen Colebourne, architecte et célèbre contributeur Java, estime qu'Oracle l’a délibérément ou accidentellement configuré pour être un piège pour les utilisateurs : le JDK Oracle vient avec une nouvelle licence. « Depuis 23 ans, les développeurs ont téléchargé le JDK d’Oracle et l’ont utilisé gratuitement. Tapez "JDK" dans votre moteur de recherche préféré, et le premier lien sera vers une page de téléchargement Oracle Java SE », explique Stephen Colebourne. « Mais cette recherche et ce lien sont désormais un piège : Oracle JDK, celui auquel toutes les recherches sur le Web vous amènent, est maintenant commercialisé ».

Ainsi, le piège, selon lui, est que les développeurs vont télécharger le JDK Oracle (parce que c'est ce qu'ils ont toujours fait, et c'est suggèrent les recherches sur le Web) ; l'utiliser en production (car ils ne vont pas réaliser que la licence a changé) ; et recevoir plus tard un appel désagréable des équipes Licences d'Oracle exigeant de payer beaucoup d'argent.

« En d'autres termes, Oracle peut amener [les développeurs] à télécharger la mauvaise version (commerciale) de Java. Si vous ne lisez pas attentivement les [termes], vous ne réaliserez peut-être même pas qu'Oracle JDK est maintenant commercial et que vous êtes donc tenu de payer Oracle pour Java », dit-il.

Maintenant, est-ce un piège de la part d'Oracle ? L'architecte Java laisse les lecteurs se faire leurs propres opinions. Mais en attendant d’avoir une réponse, il y a une solution simple : utiliser une build OpenJDK. En plus de son JDK commercial, Oracle propose une build OpenJDK qui est gratuite et sous licence GPL, disponible sur le site jdk.java.net. Et il y aussi d'autres builds OpenJDK qui devraient bientôt être disponibles, comme celles d'AdoptOpenJDK ou de groupes autres qu'Oracle.

Télécharger l'OpenJDK

Sources : Annonce Oracle, OpenJDK, Stephen Colebourne

Et vous ?

Aviez-vous l'habitude de télécharger le JDK Oracle ? Que pensez-vous de ce changement licence ?
Croyez-vous qu'Oracle voulait piéger les développeurs Java ?
A part cela, que pensez-vous de cette nouvelle version de Java ?
Quelles nouveautés appréciez-vous le plus ? Quels changements trouvez-vous décevants ? Pourquoi ?
Qu'attendez-vous des prochaines versions ?

Voir aussi :

JavaFX 11 est enfin disponible en tant que module open source distinct du JDK : tour d'horizon des améliorations et des nouveautés
JDK 11 : trois nouveautés sont prévues ainsi que la suppression de JAVA EE, JavaFX et CORBA, dans le cadre des mises à jour semestrielles
Java 11 : migrer ou changer de langage, qu'envisagez-vous de faire suite aux derniers changements annoncés par Oracle ?
Oracle annonce la sortie officielle de Java 10, ce qui signifie la fin des mises à jour et correctifs de sécurité gratuits pour Java 9


Vous avez aimé cette actualité ? Alors partagez-la avec vos amis en cliquant sur les boutons ci-dessous :


 Poster une réponse Signaler un problème

Avatar de grunt2000 grunt2000 - Membre confirmé https://www.developpez.com
le 27/09/2018 à 13:19
Pardonnez-moi d'être une freizh, mais je n'arrive pas à comprendre quelle est la différence entre la version open jdk et celle d'Oracle dans le code.

Deux équipes concurrentes font la course à chaque fois pour implémenter des fonctionnalités de chaque côté,
Code : Sélectionner tout
1
2
3
4
// Open JDK
public void increase() {
   this.value = this.value + 1;
}
Code : Sélectionner tout
1
2
3
4
// Oracle
public void increase() {
   this.value = 1 + this.value;
}
... en se tenant prêtes pour livrer toutes deux le 25 Septembre ?

ou bien : c'est le même code mais on fait un package payant pour Oracle, et un gratuit pour open-jdk, ou qu'est-ce qui change ?

Concrètement, c'est quoi les différences binaires entre les deux versions ?
Avatar de darklinux darklinux - Membre régulier https://www.developpez.com
le 27/09/2018 à 13:49
Il n ' y en a aucune , mais OpenJDK est la version de référence à Java
Avatar de grunt2000 grunt2000 - Membre confirmé https://www.developpez.com
le 27/09/2018 à 14:58
Citation Envoyé par darklinux Voir le message
Il n ' y en a aucune , mais OpenJDK est la version de référence à Java
Du coup, comment une version OpenJDK se transforme en version Oracle ?
Parce qu'à ce compte, je vous fais aussi une version grunt2000 si vous voulez : s'il suffit de copier le binaire sur son site web.

D'où vient que c'est Oracle qui semble décider de ce qui sera implémenté dans Java, alors que ça devrait être du coup, si c'est OpenJDK le chef de file, et pourquoi les gens iraient chez Oracle acheter un JDK du coup, s'il est à l'exact identique de l'autre ?
Avatar de John Bournet John Bournet - Membre éclairé https://www.developpez.com
le 27/09/2018 à 15:14
Citation Envoyé par grunt2000 Voir le message
Du coup, comment une version OpenJDK se transforme en version Oracle ?
Parce qu'à ce compte, je vous fais aussi une version grunt2000 si vous voulez : s'il suffit de copier le binaire sur son site web.

D'où vient que c'est Oracle qui semble décider de ce qui sera implémenté dans Java, alors que ça devrait être du coup, si c'est OpenJDK le chef de file, et pourquoi les gens iraient chez Oracle acheter un JDK du coup, s'il est à l'exact identique de l'autre ?
L'Open JDK est maintenu par Oracle, la version "Oracle" du JDK contient des modifications de licence, des ajustements de performances ou des implémentations spécifiques à certains environnements. Les notions de support ne sont pas les mêmes non plus.
Avatar de adiGuba adiGuba - Expert éminent sénior https://www.developpez.com
le 27/09/2018 à 20:46
L'OpenJDK c'est la version de référence (depuis je ne sais plus quelle version).
La version d'Oracle n'est juste qu'une des implémentations parmi d'autre (comme IBM).

Rien n'a vraiment changé de ce côté là. C'était déjà comme cela avant.

Ce qui a changé c'est que desormais le JDK d'Oracle est soumis à un accord commercial.
En clair il n'est plus gratuit... Contrairement à l'OpenJDK.

Bref pour continuer à l'utiliser gratuitement c'est par ici :
https://jdk.java.net/11/
Avatar de grunt2000 grunt2000 - Membre confirmé https://www.developpez.com
le 28/09/2018 à 12:47
Juste pour que je comprenne bien, parce que ça ne m'est pas clair : pareil mais implémentation différente ?

Est-ce que la situation est celle-ci :

Oracle OpenJDK
Classes Mêmes CRC que OpenJDK Mêmes CRC que Oracle
Exécutables java.exe et javac.exe même taille et CRC/SHA-1/MD5... que OpenJDK java.exe et javac.exe même taille et CRC/SHA-1/MD5... que Oracle

Ou bien :
Les classes distribuées et les exécutables distribués peuvent différer binairement
et alors : comment précisément ?
Avatar de Olivier Famien Olivier Famien - Chroniqueur Actualités https://www.developpez.com
le 28/09/2018 à 16:29
Andrew Haley de Red Hat donne son avis sur l’avenir d’OpenJDK, l’implémentation libre de Java SE,
après la décision d’Oracle de livrer JDK 11 sous licence commerciale

Oracle a annoncé, depuis quelques jours, la sortie de la version 11 de sa plateforme Java SE composée de JSR (définissant les spécifications de Java), JDK (comprenant les bibliothèques logicielles de Java) et JRE (l’environnement d’exécution de Java également inclus dans JDK). Au-delà des améliorations techniques et autres nouvelles fonctionnalités introduites dans cette version de Java 11, la nouvelle version de la plateforme Java SE, annoncée avec un support LTS (un support à long terme), sera livrée avec une version commerciale de JDK 11.


Cette résultante est la conséquence des décisions d’Oracle annoncées en juin dernier et introduisant un modèle d’abonnement à la plateforme Java SE afin que les utilisateurs puissent bénéficier d’un support des ingénieurs d’Oracle pour cette plateforme. Selon les termes de licence d’Oracle, cet abonnement fournit aux entreprises des fonctionnalités et des outils commerciaux tels que Java Advanced Management Console pour identifier, gérer et ajuster l’utilisation du bureau Java SE en entreprise. Il inclut également le support Oracle Premier pour les versions actuelles et versions précédentes de Java SE.

Pour résumer, l’argument présenté par Oracle pour soutenir cette décision est que « les entreprises veulent une totale flexibilité quant au moment et à la manière dont elles mettent à jour leurs applications de production ». Cet abonnement serait donc un support complémentaire aux options gratuites utilisées par les entreprises pour gérer leurs outils Java. À ce sujet, l’entreprise explique que « l’abonnement Java SE complète les versions gratuites et continues de Java SE et la gestion de l’écosystème OpenJDK dans lequel Oracle produit maintenant des binaires Open Source OpenJDK, permettant ainsi aux développeurs et aux entreprises de ne pas avoir besoin d’un support commercial ou d’outils de gestion d’entreprise ».


Malgré ces propos qui se veulent rassurants, Andrew Haley, ingénieur en chef de la plateforme Java chez Red Hat, a tenu à préciser de manière claire et nette qu’Oracle ne fournirait plus de binaires gratuits de JDK après une période de six mois. Et les ingénieurs de l’entreprise n’écriront plus de correctifs pour les bogues OpenJDK après cette période.

Voyant des craintes s’élever au sein de la communauté Java à la suite de ces changements, Andrew Haley encourage la communauté à être optimiste et explique dans un billet de blog comment OpenJDK pourrait toujours évoluer sans le concours des ingénieurs d’oracle. À noter qu’OpenJDK est l’implémentation libre (sous licence GPL) de la plateforme Java SE d’Oracle. Elle se compose de plusieurs contributeurs dont Oracle, Red Hat, Azul Systems, SAP SE, IBM, Apple pour ne citer que ceux-là.


Selon le modèle de fonctionnement établi autour d’OpenJDK, les organisations collaborent pour résoudre les bogues critiques et les vulnérabilités de sécurité et publient les correctifs à intervalles réguliers. Pour Andrew Haley, qui assure actuellement la direction des projets de mise à jour de JDK 8 et 11, ce mode de fonctionnement ne devrait pas changer pour OpenJDK 8 et OpenJDK 11, même sans le concours des ingénieurs d’Oracle. Cela sous-entend qu’OpenJDK 8 qui bénéficie d’un support LTS jusqu’en 2023 et OpenJDK 11 au-delà de cette date recevront leurs mises à jour régulières comme prévu. Et pour encore rassurer la communauté sur le fait qu’OpenJDK survivra sans Oracle, Haley annonce, qu’en plus des personnes et organisations qui aident actuellement à la sortie des mises à jour d’OpenJDK, de nouvelles organisations, y compris Amazon Web Services, sont prêtes à apporter leur soutien au projet.

Avec le retrait du support d’Oracle dans l’implémentation des mises à jour d’OpenJDK, une question qui se pose fréquemment est celle de savoir comment les utilisateurs obtiendront des téléchargements gratuits de binaires OpenJDK compilés, par opposition au code source fourni par OpenJDK. Selon Haley, le projet de mises à jour OpenJDK lui-même devrait s’engager à fournir des fichiers binaires lors de la publication des versions. Mais si vous utilisez des distributions Linux, l’ingénieur en chef de Red Hat suggère d’utiliser les paquets OpenJDK fournis par le système et son gestionnaire de packages.

Pour les binaires OpenJDK de Windows et Mac OS, il incombera aux projets de mises à jour OpenJDK de décider comment et où construire les fichiers binaires. Cela dit, Haley déclare que son « équipe Red Hat est heureuse de s’engager à fournir des téléchargements Windows et Linux régulièrement mis à jour, testés (et en particulier par TCK'd) ». Mais Haley souligne qu’ils auront probablement besoin d’aide pour la construction et les tests sur Macintosh.

Enfin, Haley termine son propos en reconnaissant que l’absence du soutien des ingénieurs d’Oracle constituera un défi pour la communauté Java. Mais pour lui, ce défi devrait permettre à la communauté de prouver qu’elle peut toujours tenir sans cette entreprise. Un appel est donc lancé aux contributeurs pour assurer la pérennité d’OpenJDK.

Source : Java SE Roadmap, Red Hat

Et vous ?

Quel est votre avis sur le retrait du support d’Oracle pour OpenJDK ?

Êtes-vous rassuré par les déclarations de Haley quant à l’avenir du projet OpenJDK ?

Pensez-vous qu’OpenJDK pourra tenir sans le soutien des ingénieurs Oracle ?

Voir aussi

Java SE : Oracle soumet l’utilisation des fonctionnalités commerciales à une souscription mensuelle, la licence permanente n’est plus d’actualité
Oracle annonce des changements pour Java SE : deux versions par an, licence GPL, des fonctionnalités commerciales du JDK d’Oracle en open source
Oracle envisage de transférer le développement de Java EE à une fondation open source, une preuve de l’abandon de la plateforme
Java SE 8 : les mises à jour publiques seront disponibles jusqu’à décembre 2020 minimum pour les fonctionnalités non commerciales
Oracle annonce la disponibilité générale de Java EE 8, le développement de la plateforme sera désormais géré par la Fondation Eclipse
Avatar de GLDavid GLDavid - Membre expert https://www.developpez.com
le 28/09/2018 à 16:41
Bonjour

Enfin, Haley termine son propos en reconnaissant que l’absence du soutien des ingénieurs d’Oracle constituera un défi pour la communauté Java. Mais pour lui, ce défi devrait permettre à la communauté de prouver qu’elle peut toujours tenir sans cette entreprise. Un appel est donc lancé aux contributeurs pour assurer la pérennité d’OpenJDK.
J'appelle cela une liberation. Pour être franc et avoir été pendant longtemps un codeur Java, la nouvelle de l'acquisition de Java par Oracle m'a été désagréable et les évènements consequents ne m'ont pas rassurés. On savait qu'Oracle essaierait de tirer le maximum de bénéfices.
Là, je vois une prise de conscience et un appel à ce que Java soit clairement du domaine libre. En gros, OpenJDK serait la base et norme, Oracle peut faire ce qu'il veut autour de cette base.

@++
Avatar de deltree deltree - Membre averti https://www.developpez.com
le 28/09/2018 à 16:48
On supprime on supprime... mais est-ce qu'au moins ça baisse en taille?
Avatar de grunt2000 grunt2000 - Membre confirmé https://www.developpez.com
le 29/09/2018 à 6:39
Je reviens sur le problème des modules.
Citation Envoyé par adiGuba Voir le message
Il y a pourtant une solution simple : ne pas utiliser le système de module !
Je suis passé sur le JDK 10 il y a quelques mois. Et je lance Geoserver sur mon poste.

Code : Sélectionner tout
1
2
3
4
5
6
SEVEN@SEVEN-PC MINGW64 /c/Outils/Programmation/geoserver-2.13.2/bin
$ sh startup.sh
GEOSERVER DATA DIR is F:\data\dev-compte-france\geoserver_data_dir
[...]
29 sept. 06:05:48 ERROR [context.ContextLoader] - Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'KMLEncoder': Failed to introspect bean class [org.geoserver.kml.KMLEncoder] for lookup method metadata: could not find class that it depends on; nested exception is java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException
D'après les solutions que l'on trouve sur Internet sur ce sujet, il faut rajouter à la ligne de commande la directive :
--add-modules java.xml.bind

Alors, je force le trait exprès pour exagérer mais j'ai fait l'essai et bien sûr ceci ne fonctionne pas :
Code : Sélectionner tout
1
2
sh startup.sh --add-modules java.xml.bind
sh startup.sh -D--add-modules java.xml.bind

Il faut lire le contenu du script startup.sh livré par Geotools :

Code : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#!/bin/sh
# -----------------------------------------------------------------------------
# Start Script for GEOSERVER
#
# $Id$
# -----------------------------------------------------------------------------
 
# Guard against misconfigured JAVA_HOME
if [ ! -z "$JAVA_HOME" -a ! -x "$JAVA_HOME"/bin/java ]; then
  echo "The JAVA_HOME environment variable is set but JAVA_HOME/bin/java"
  echo "is missing or not executable:"
  echo "    JAVA_HOME=$JAVA_HOME"
  echo "Please either set JAVA_HOME so that the Java runtime is JAVA_HOME/bin/java"
  echo "or unset JAVA_HOME to use the Java runtime on the PATH."
  exit 1
fi
 
# Find java from JAVA_HOME or PATH
if [ ! -z "$JAVA_HOME" ]; then
  _RUNJAVA="$JAVA_HOME"/bin/java
elif [ ! -z "$(which java)" ]; then
  _RUNJAVA=java
else
  echo "A Java runtime (java) was not found in JAVA_HOME/bin or on the PATH."
  echo "Please either set the JAVA_HOME environment variable so that the Java runtime"
  echo "is JAVA_HOME/bin/java or add the Java runtime to the PATH."
  exit 1
fi
 
if [ -z $GEOSERVER_HOME ]; then
  #If GEOSERVER_HOME not set then guess a few locations before giving
  # up and demanding user set it.
  if [ -r start.jar ]; then
     echo "GEOSERVER_HOME environment variable not found, using current "
     echo "directory.  If not set then running this script from other "
     echo "directories will not work in the future."
     export GEOSERVER_HOME=`pwd`
  else 
    if [ -r ../start.jar ]; then
      echo "GEOSERVER_HOME environment variable not found, using current "
      echo "location.  If not set then running this script from other "
      echo "directories will not work in the future."
      export GEOSERVER_HOME=`pwd`/..
    fi
  fi 
 
  if [ -z "$GEOSERVER_HOME" ]; then
    echo "The GEOSERVER_HOME environment variable is not defined"
    echo "This environment variable is needed to run this program"
    echo "Please set it to the directory where geoserver was installed"
    exit 1
  fi
 
fi
 
if [ ! -r "$GEOSERVER_HOME"/bin/startup.sh ]; then
  echo "The GEOSERVER_HOME environment variable is not defined correctly"
  echo "This environment variable is needed to run this program"
  exit 1
fi
 
#Find the configuration directory: GEOSERVER_DATA_DIR
if [ -z $GEOSERVER_DATA_DIR ]; then
    if [ -r "$GEOSERVER_HOME"/data_dir ]; then
        export GEOSERVER_DATA_DIR="$GEOSERVER_HOME"/data_dir
    else
        echo "No GEOSERVER_DATA_DIR found, using application defaults"
	      GEOSERVER_DATA_DIR=""
    fi
fi
 
cd "$GEOSERVER_HOME"
 
if [ -z $MARLIN_JAR]; then
    export MARLIN_JAR=`find \`pwd\`/webapps -name "marlin*.jar" | head -1`
fi
export MARLIN_ENABLER="-Xbootclasspath/a:$MARLIN_JAR -Dsun.java2d.renderer=org.marlin.pisces.MarlinRenderingEngine"
 
echo "GEOSERVER DATA DIR is $GEOSERVER_DATA_DIR"
#added headless to true by default, if this messes anyone up let the list
#know and we can change it back, but it seems like it won't hurt -ch
exec "$_RUNJAVA" $JAVA_OPTS $MARLIN_ENABLER -DGEOSERVER_DATA_DIR="$GEOSERVER_DATA_DIR" -Djava.awt.headless=true -DSTOP.PORT=8079 -DSTOP.KEY=geoserver -jar start.jar
Là, on peut observer qu'en définissant à l'extérieur la variable d'environnement :
Code : Sélectionner tout
export JAVA_OPTS='--add-modules java.xml.bind'
Il démarre correctement.

Donc, c'est résolu pour lui. Mais tous les autres programmes Java démarrant par des scripts se pose le même problème, s'ils ne démarrent pas directement avec un JDK 9+.
Le .sh, ici, il est bien fait. Mais pour les autres que je rencontrerai, s'ils n'ont pas un JAVA_OPTS aussi bien placé : il faudra faire un cycle de lancement et examen des classes manquantes, édition à la main du sh pour rajouter un module, jusqu'à ce que ça marche.

C'est pas si instantané que ça.
Contacter le responsable de la rubrique Accueil