Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Java 11, 12 sont sortis et bientôt le 13, c'est le moment de remplacer son JDK 8

Lilian BENOIT
September 10, 2019

Java 11, 12 sont sortis et bientôt le 13, c'est le moment de remplacer son JDK 8

Java 11 est sorti en septembre dernier, estampillé LTS (Long Term Support),
Java 12 est sorti en mars dernier,
Java 13 va sortir la semaine prochaine, soit le 17 septembre 2019

Que de changement depuis Java 8 ?

Nouvelle sortie de Java tous les 6 mois
Notion de LTS
Java 9 et ses fameux modules
Changement de licence d'Oracle

Après la sortie de Java 9, 10, 11, 12 et bientôt 13, c'est le moment de franchir le cap et de changer de JDK. Nous aborderons les nouveautés et nous verrons les points d'attention.

En clair, tout ce que vous devez savoir pour commencer ou migrer votre projet en Java 11+ en douceur.

Lilian BENOIT

September 10, 2019
Tweet

More Decks by Lilian BENOIT

Other Decks in Technology

Transcript

  1. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 1/121 Java 11, 12 sont sortis et bientôt le 13, c'est le Java 11, 12 sont sortis et bientôt le 13, c'est le moment de remplacer son JDK 8 moment de remplacer son JDK 8 Lilian BENOIT (Septembre 2019) ParisJUG 1
  2. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 2/121 Qui suis-je ? Qui suis-je ? ESN Bordelaise BordeauxJUG Leader @Lilian_Benoit https://github.com/lilian-benoit 2
  3. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 3/121 JDK 8 est sorti en 2014 JDK 8 est sorti en 2014 Pour information, 1er version du JDK en 1996 3
  4. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 4/121 La donne a changé. La donne a changé. 4
  5. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 5/121 Qu'est ce qui a changé ? Qu'est ce qui a changé ? Java 9 avec le Projet Jigsaw Changement de licence Nouveau calendrier de sortie 5
  6. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 6/121 Nouveau calendrier de sortie Nouveau calendrier de sortie 6 . 1
  7. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 7/121 Précédentes dates de sortie. Précédentes dates de sortie. JDK 1.0 / 23 Janvier 1996 ... J2SE 5 / 30 Septembre 2004 Java SE 6 / 11 Décembre 2006 Java SE 7 / 28 Juillet 2011 Java SE 8 / 18 Mars 2014 6 . 2
  8. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 8/121 Nouvelle cadence de sortie. Nouvelle cadence de sortie. Java SE 9 / 21 Septembre 2017 Java SE 10 / 20 Mars 2018 Java SE 11 / 25 Septembre 2018 Java SE 12 / 19 Mars 2019 Java SE 13 / 17 Septembre 2019 Java SE 14 / Mars 2020 6 . 3
  9. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 9/121 Versions LTS. Versions LTS. Java SE 8 / 18 Mars 2014 Java SE 11 / 25 Septembre 2018 Java SE 17 / Septembre 2021 6 . 4
  10. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 10/121 “You can choose the conservative LTS path (blue pill)... or you can choose the aggressive feature release path (red pill)” @mreinhold #FOSDEM” 7
  11. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 11/121 Changement de licence Changement de licence 8 . 1
  12. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 12/121 Oracle fournit JDK sous 2 formes Oracle fournit JDK sous 2 formes Oracle JDK Oracle OpenJDK 8 . 2
  13. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 13/121 8 . 3
  14. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 14/121 8 . 4
  15. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 15/121 Java n'est plus gratuit ? Java n'est plus gratuit ? 8 . 5
  16. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 16/121 Si, mais le JDK d'Oracle n'est plus le JDK par défaut Si, mais le JDK d'Oracle n'est plus le JDK par défaut Le JDK est développé avec OpenJDK à la base Le JDK est développé avec OpenJDK à la base 8 . 6
  17. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 17/121 Détermination de l'origine Détermination de l'origine Oracle JDK Oracle JDK OpenJDK OpenJDK java -version java 11 2018-09-25 Java(TM) SE Runtime Environment 18.9 (build 11+28) Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11+28, mixed mode) java 11 2018-09-25 OpenJDK Runtime Environment 18.9 (build 11+28) OpenJDK 64-Bit Server VM 18.9 (build 11+28, mixed mode) 8 . 7
  18. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 18/121 Projet Jigsaw ( Java 9 ) Projet Jigsaw ( Java 9 ) 9 . 1
  19. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 19/121 Projet Jigsaw Projet Jigsaw JEP 200 - The Modular JDK JEP 201 - Modular Source code JEP 220 - Modular Runtime Images JEP 260 - Encapsulate Most Internal APIs JEP 261 - Module System 9 . 2
  20. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 20/121 9 . 3
  21. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 21/121 JAVA 9 JAVA 9 (ET +) (ET +) Le classpath n'est pas mort Le classpath n'est pas mort 9 . 4
  22. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 22/121 Que faire ? Que faire ? 10 . 1
  23. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 23/121 Rester en JDK 8 ? Rester en JDK 8 ? Ne pas tenir compte de la sécurité Sous *nix, utiliser les versions fournies par les distributions Payer le support d'un éditeur Construire son propre JDK Utiliser les binaires de AdoptOpenJDK 10 . 2
  24. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 24/121 Passer au JDK 9 ou JDK 10 ? Passer au JDK 9 ou JDK 10 ? Personne ne fournit de support sur ces versions 10 . 3
  25. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 25/121 Passer au JDK 11 ? Passer au JDK 11 ? Reste à choisir son fournisseur de JDK Oracle JDK (c) AdoptOpenJDK Red Hat Distribution Linux (debian, arch...) Azul Zulu Azul Zing (c) Amazon Corretto IBM basé sur OpenJ9 SapMachine (SAP) Liberica (BellSoft) 10 . 4
  26. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 26/121 Calendrier du support Calendrier du support Version Date de sortie Fin support Oracle OpenJDK Fin support OpenJDK (LTS) Java 8 Mars 2014 Janv. 2019 Juin 2023 Java 9 Sept. 2017 Mars 2018 N/A Java 10 Mars 2018 Sept. 2018 N/A Java 11 Sept. 2018 Mars 2019 Octobre 2024 Java 12 Mars 2019 Sept. 2019 N/A Java 13 Sept. 2019 Mars 2020 N/A 10 . 5
  27. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 27/121 Oracle souhaite se centrer sur les nouvelles fonctionnalités Oracle souhaite se centrer sur les nouvelles fonctionnalités
  28. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 28/121 Oracle (80%) SAP (7%) Redhat (5%) Google (3%) Bellsoft (1%) IBM (1%) Alibaba, Amazon, ARM, Azul, ... 10 . 6
  29. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 29/121 Red Hat prend le leadership sur OpenJDK 8 et 11 Red Hat prend le leadership sur OpenJDK 8 et 11 Il l'avait déjà fait pour OpenJDK 6 et OpenJDK 7 Il l'avait déjà fait pour OpenJDK 6 et OpenJDK 7 10 . 7
  30. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 30/121 Passons en revue les nouveautés Passons en revue les nouveautés 11
  31. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 31/121 Java 9 Java 9 91 JEP (JDK ENHANCEMENT PROPOSALS) 91 JEP (JDK ENHANCEMENT PROPOSALS) 12 . 1
  32. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 32/121 Nouveauté Java 9 Nouveauté Java 9 JSR 376 - Projet Jigsaw JEP 110 - Client HTTP/2 (incubation) JEP 222 - JShell: the interactive Java REPL JEP 224, 225 - Javadoc (HTML5 et Recherche) JEP 269 - Collection factory methods JEP 277 - Enhanced Deprecation JEP 282 - jlink, Editeur de liens Java JEP 295 - Ahead-of-Time Compilation (Expérimental) 12 . 2
  33. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 33/121 JSR 376 - Projet Jigsaw JSR 376 - Projet Jigsaw 12 . 3
  34. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 34/121 JEP 110 - Client HTTP/2 (incubation) JEP 110 - Client HTTP/2 (incubation) 12 . 4
  35. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 35/121 JEP 222 - JShell: the interactive Java REPL JEP 222 - JShell: the interactive Java REPL 12 . 5
  36. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 36/121 JEP 224, 225 - Javadoc (HTML5 et Recherche) JEP 224, 225 - Javadoc (HTML5 et Recherche) Lien vers la javadoc en local [pendant la présentation] ( ) en ligne ( ) localhost site Oracle 12 . 6
  37. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 37/121 JEP 269 - Collection factory methods JEP 269 - Collection factory methods Avant Après List<String> liste = new ArrayList<String>(); liste.add("Je"); liste.add("passe"); liste.add("à"); liste.add("Paris"); liste = Collections.unmodifiableList(liste); List<String> liste = List.of("Je", "passe", "à", "Paris"); 12 . 7
  38. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 38/121 JEP 277 - Enhanced Deprecation JEP 277 - Enhanced Deprecation since forRemoval 12 . 8
  39. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 39/121 JEP 282 - jlink, Editeur de liens Java JEP 282 - jlink, Editeur de liens Java 12 . 9
  40. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 40/121 JEP 295 - Ahead-of-Time Compilation JEP 295 - Ahead-of-Time Compilation Expérimental Compilation du code java en code native avant le lancement Utilisé par GraalVM comme backend 12 . 10
  41. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 41/121 Java 10 Java 10 12 JEP (JDK ENHANCEMENT PROPOSALS) 12 JEP (JDK ENHANCEMENT PROPOSALS) 13 . 1
  42. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 42/121 Nouveauté Java 10 Nouveauté Java 10 JEP 286 - Local-Variable Type Inference JEP 304 - Garbage Collector Interface JEP 307 - Parallel Full GC for G1 JEP 310 - Application Class-Data Sharing JEP 317 - Experimental Java-Based JIT Compiler JEP 319 - Root Certificates JEP 322 - Time-based Release Versionning 13 . 2
  43. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 43/121 JEP 286 - Local-Variable Type Inference JEP 286 - Local-Variable Type Inference 13 . 3
  44. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 44/121 JEP 304 - Garbage Collector Interface JEP 304 - Garbage Collector Interface 13 . 4
  45. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 45/121 JEP 307 - Parallel Full GC for G1 JEP 307 - Parallel Full GC for G1 13 . 5
  46. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 46/121 JEP 310 - Application Class-Data Sharing JEP 310 - Application Class-Data Sharing Réduit le temps de démarrage Diminue l'empreinte mémoire 13 . 6
  47. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 47/121 JEP 319 - Root Certificates JEP 319 - Root Certificates 13 . 7
  48. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 48/121 JEP 317 - Experimental Java-Based JIT Compiler JEP 317 - Experimental Java-Based JIT Compiler Projet Metropolis (Java-on-Java) 13 . 8
  49. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 49/121 JEP 322 - Time-based Release Versionning JEP 322 - Time-based Release Versionning Format 2 nouvelles propriétés openjdk version "11.0.2" 2019-01-15 OpenJDK Runtime Environment AdoptOpenJDK (build 11.0.2+9) OpenJDK 64-Bit Server VM AdoptOpenJDK (build 11.0.2+9, mixed mode) $FEATURE.$INTERIM.$UPDATE.$PATCH - java.version.date - java.vendor.version 13 . 9
  50. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 50/121 Java 11 Java 11 17 JEP (JDK ENHANCEMENT PROPOSALS) 17 JEP (JDK ENHANCEMENT PROPOSALS) 14 . 1
  51. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 51/121 Nouveauté Java 11 Nouveauté Java 11 JEP 318 - Epsilon: A No-Op Garbage Collector JEP 321 - HTTP Client (Standard) JEP 328 - Java Flight Recorder (JFR) JEP 330 - Launch Single-File Source-Code Programs JEP 332 - Transport Layer Security (TLS) 1.3 JEP 333 - Project ZGC 14 . 2
  52. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 52/121 JEP 318 - Epsilon: A No-Op Garbage Collector JEP 318 - Epsilon: A No-Op Garbage Collector -XX:+UseEpsilonGC 14 . 3
  53. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 53/121 JEP 321 - HTTP Client (Standard) JEP 321 - HTTP Client (Standard) Avant Après URL url = new URL("http://wwww...."); InputStream is = url.openStream() HttpClient client = HttpClient.newHttpClient(); HttpRequest request = HttpRequest.newBuilder() .GET() .uri(new URI("http://wwww....")) .build(); var response = client.send(request, BodyHandlers.ofString()); 14 . 4
  54. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 54/121 JEP 328 - Java Flight Recorder (JFR) JEP 328 - Java Flight Recorder (JFR) 14 . 5
  55. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 55/121 JEP 330 - Launch Single-File Source-Code Programs JEP 330 - Launch Single-File Source-Code Programs 14 . 6
  56. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 56/121 JEP 332 - Transport Layer Security (TLS) 1.3 JEP 332 - Transport Layer Security (TLS) 1.3 Annonce IETF, 10 août 2018 https://www.ietf.org/blog/tls13/ 14 . 7
  57. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 57/121 JEP 333 - Project ZGC (Expérimental) JEP 333 - Project ZGC (Expérimental) Support Linux/x64 (initialement) 14 . 8
  58. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 58/121 Mais une nouvelle version amène... Mais une nouvelle version amène... 15 . 1
  59. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 59/121 Suppression des modules JavaFX Suppression des modules JavaFX 15 . 2
  60. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 60/121 15 . 3
  61. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 61/121 Suppression des modules de déploiement Suppression des modules de déploiement Applet Java Web Start (JWS) 15 . 4
  62. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 62/121 Modules Java EE supprimés Modules Java EE supprimés 15 . 5
  63. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 63/121 15 . 6
  64. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 64/121 Modules Java EE supprimés Modules Java EE supprimés JavaBeans Activation Framework (JAF) CORBA Java Transaction API (JTA) javax.activation javax.activity.* javax.rmi.* javax.rmi.CORBA.* org.omg.* javax.transaction.* 15 . 7
  65. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 65/121 Modules Java EE supprimés Modules Java EE supprimés Java Architecture for XML Binding (JAXB) Java API for XML Web Services (JAX-WS) Commons annotations javax.xml.bind.* javax.jws.* javax.jws.soap.* javax.xml.soap.* javax.xms.ws.* javax.annotation.* 15 . 8
  66. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 66/121 Taille du JDK Taille du JDK Versions JDK Taille (Mo) 1.5 u22 113 Mo 1.6 u45 206 Mo 1.7 u71 288 Mo 1.8 u131 364 Mo 9 545 Mo 10 736 Mo 11 309 Mo 15 . 9
  67. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 67/121 Java 12 Java 12 8 JEP (JDK ENHANCEMENT PROPOSALS) 8 JEP (JDK ENHANCEMENT PROPOSALS) 16 . 1
  68. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 68/121 Nouveauté Java 12 Nouveauté Java 12 JEP 189 - Shenandoah: A Low-Pause-Time Garbage Collector (Experimental) JEP 230 - Microbenchmark Suite JEP 325 - Switch Expressions (Preview) JEP 341 - Default CDS Archives 16 . 2
  69. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 69/121 JEP 189 - Shenandoah: A Low-Pause-Time Garbage JEP 189 - Shenandoah: A Low-Pause-Time Garbage Collector (Experimental) Collector (Experimental) 16 . 3
  70. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 70/121 JEP 230 - Microbenchmark Suite JEP 230 - Microbenchmark Suite dépend de JMH (Java Microbenchmark Harness) v1.12 16 . 4
  71. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 71/121 JEP 325 - Switch Expressions (Preview) JEP 325 - Switch Expressions (Preview) 16 . 5
  72. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 72/121 JEP 341 - Default CDS Archives JEP 341 - Default CDS Archives Active par défaut CDS, plus besoin d'utiliser l'option -Xshare=dump 16 . 6
  73. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 73/121 Java 13 Java 13 5 JEP (JDK ENHANCEMENT PROPOSALS) 5 JEP (JDK ENHANCEMENT PROPOSALS) 17 . 1
  74. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 74/121 Nouveauté Java 13 Nouveauté Java 13 JEP 350 - Dynamic CDS Archives JEP 351 - ZGC: Uncommit Unused Memory JEP 353 - Reimplement the Legacy Socket API JEP 354 - Switch Expressions (Preview) JEP 355 - Text Blocks (Preview) 17 . 2
  75. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 75/121 JEP 350 - Dynamic CDS Archives JEP 350 - Dynamic CDS Archives Etendre CDS à l'application : AppCDS 17 . 3
  76. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 76/121 JEP 351 - ZGC: Uncommit Unused Memory JEP 351 - ZGC: Uncommit Unused Memory 17 . 4
  77. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 77/121 JEP 353 - Reimplement the Legacy Socket API JEP 353 - Reimplement the Legacy Socket API Réimplémentation interne de l’API API existante depuis Java 1.0 - java.net.Socket - java.net.ServerSocket 17 . 5
  78. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 78/121 JEP 353 - Reimplement the Legacy Socket API JEP 353 - Reimplement the Legacy Socket API Simplification de l implémentation qui va permettre d’introduire les Fiber (Projet Loom) 17 . 6
  79. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 79/121 JEP 354 - Switch Expressions (Preview) JEP 354 - Switch Expressions (Preview) Example de https://blog.codefx.org/java/switch-expressions/ 17 . 7
  80. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 80/121 JEP 354 - Switch Expressions (Preview) JEP 354 - Switch Expressions (Preview) boolean result; switch (ternaryBool) { case TRUE: result = true; // don't forget to `break` or you're screwed! break; case FALSE: result = false; break; case FILE_NOT_FOUND: // intermediate variable for demo purposes; // wait for it... var ex = new UncheckedIOException( "This is ridiculous!", new FileNotFoundException()); throw ex; default: // ... here we go: // can't declare another variable with the same name var ex2 = new IllegalArgumentException( "Seriously?!"); throw ex2; } 17 . 8
  81. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 81/121 JEP 354 - Switch Expressions (Preview) JEP 354 - Switch Expressions (Preview) private static boolean toBoolean(Bool ternaryBool) { switch (ternaryBool) { case TRUE: return true; case FALSE: return false; case FILE_NOT_FOUND: throw new UncheckedIOException( "This is ridiculous!", new FileNotFoundException()); // without default branch, the method wouldn't compile default: throw new IllegalArgumentException("Seriously?!"); } } 17 . 9
  82. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 82/121 JEP 354 - Switch Expressions (Preview) JEP 354 - Switch Expressions (Preview) boolean result = switch (ternaryBool) { case TRUE: yield true; case FALSE: yield false; case FILE_NOT_FOUND: throw new UncheckedIOException( "This is ridiculous!", new FileNotFoundException()); default: throw new IllegalArgumentException("Seriously?!"); }; 17 . 10
  83. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 83/121 JEP 354 - Switch Expressions (Preview) JEP 354 - Switch Expressions (Preview) boolean result = switch(ternaryBool) { case TRUE -> true; case FALSE -> false; case FILE_NOT_FOUND -> throw new UncheckedIOException( "This is ridiculous!", new FileNotFoundException()); // as we'll see in "Exhaustiveness", `default` is not necessary default -> throw new IllegalArgumentException("Seriously?!"); }; 17 . 11
  84. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 84/121 JEP 354 - Switch Expressions (Preview) JEP 354 - Switch Expressions (Preview) // compile error: // "the switch expression does not cover all possible input values" boolean result = switch (ternaryBool) { case TRUE -> true; // no case for `FALSE` case FILE_NOT_FOUND -> throw new UncheckedIOException( "This is ridiculous!", new FileNotFoundException()); }; 17 . 12
  85. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 85/121 JEP 355 - Text Blocks (Preview) JEP 355 - Text Blocks (Preview) Suite du JEP 326 (Raw String Literals) qui a été retiré 17 . 13
  86. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 86/121 JEP 355 - Text Blocks (Preview) JEP 355 - Text Blocks (Preview) Avant Après String html = "<html>\n" + " <body>\n" + " <p>Hello, world</p>\n" + " </body>\n" + "</html>\n"; String html = """ <html> <body> <p>Hello, world</p> </body> </html> """; 17 . 14
  87. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 87/121 JEP 355 - Text Blocks (Preview) JEP 355 - Text Blocks (Preview) Avant Après String query = "SELECT `EMP_ID`, `LAST_NAME` FROM `EMPLOYEE_TB`\n" + "WHERE `CITY` = 'INDIANAPOLIS'\n" + "ORDER BY `EMP_ID`, `LAST_NAME`;\n"; String query = """ SELECT `EMP_ID`, `LAST_NAME` FROM `EMPLOYEE_TB` WHERE `CITY` = 'INDIANAPOLIS' ORDER BY `EMP_ID`, `LAST_NAME`; """; 17 . 15
  88. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 88/121 JEP 355 - Text Blocks (Preview) JEP 355 - Text Blocks (Preview) Espace involontaire Suppression String html = """ ..............<html> .............. <body> .............. <p>Hello, world</p> .............. </body> ..............</html> .............."""; |<html>| | <body>| | <p>Hello, world</p>| | </body>| |</html>| 17 . 16
  89. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 89/121 JEP 355 - Text Blocks (Preview) JEP 355 - Text Blocks (Preview) Espace involontaire Suppression String html = """ ....... <html> ....... <body> ....... <p>Hello, world</p> ....... </body> ....... </html> ......."""; | <html>| | <body>| | <p>Hello, world</p>| | </body>| | </html>| 17 . 17
  90. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 90/121 JEP 355 - Text Blocks (Preview) JEP 355 - Text Blocks (Preview) Substitution String source = """ public void print(%s object) { System.out.println(Objects.toString(object)); } """.formatted(type); 17 . 18
  91. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 91/121 Activer les fonctionnalités Preview Activer les fonctionnalités Preview Lors de la compilation Lors de l'exécution --enable-preview --release 13 --enable-preview 17 . 19
  92. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 92/121 Les enjeux... Les enjeux... 18 . 1
  93. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 93/121 Préparation si migration Préparation si migration 19 . 1
  94. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 94/121 Préparation si migration Préparation si migration Branche spécifique mais courte S'appuyer sur l'intégration continue S'appuyer sur l'outil de construction pour le spécifique Garder une configuration spécifique minimaliste 19 . 2
  95. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 95/121 Branche spécifique mais courte Branche spécifique mais courte 19 . 3
  96. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 96/121 S'appuyer sur l'intégration continue S'appuyer sur l'intégration continue 19 . 4
  97. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 97/121 S'appuyer sur l'outil de construction S'appuyer sur l'outil de construction <profiles> <profile> <id>java-11</id> <activation> <jdk>11</jdk> </activation> <!-- Configuration spécifique Java 11 --> </profile> </profiles> 19 . 5
  98. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 98/121 Garder une configuration spécifique minimaliste Garder une configuration spécifique minimaliste 19 . 6
  99. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 99/121 Prêt... ? Prêt... ? 20
  100. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 100/121 Mettre à jour les outils Mettre à jour les outils 21 . 1
  101. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 101/121 Son poste de développement Son poste de développement Eclipse 4.9 (Photon) RC2 avec Plugin Java 11 Intellij IDEA 2018.2 Netbeans 9.0 21 . 2
  102. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 102/121 Outil de construction Outil de construction Gradle 5.0 Maven 3.5.0 compiler plugin : 3.8.0 surefire et failsafe : 2.22.0 21 . 3
  103. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 103/121 Passons au projet... Passons au projet... 22 . 1
  104. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 104/121 Les librairies Les librairies Vérifier les dépendances (compatible java 11+) Surveiller les librairies de manipulation de bytecode 22 . 2
  105. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 105/121 Principales librairies Principales librairies (Versions compatible pour Java 11) Nom Version Lombok 1.18.4 ASM 7.0 Byte Buddy 1.9.0 cglib 3.2.8 javassist 3.23.1-GA 22 . 3
  106. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 106/121 Illustration avec maven Illustration avec maven <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.7.0</version> <dependencies> <dependency> <!-- Utilisation de la version ASM compatible 11 --> <groupId>org.ow2.asm</groupId> <artifactId>asm</artifactId> <version>7.0</version> </dependency> </dependencies> </plugin> 22 . 4
  107. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 107/121 Illustration avec maven Illustration avec maven <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.7.0</version> <dependencies> <dependency> <!-- Utilisation de la version ASM compatible 13 --> <groupId>org.ow2.asm</groupId> <artifactId>asm</artifactId> <version>7.1</version> </dependency> </dependencies> </plugin> 22 . 5
  108. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 108/121 Illustration avec Hibernate Illustration avec Hibernate <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>5.2.12.Final</version> </dependency> <dependency> <!-- Utilisation de la version javassist compatible 11 --> <groupId>org.javassist</groupId> <artifactId>javassist</artifactId> <version>3.23.1-GA</version> </dependency> 22 . 6
  109. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 109/121 Librairies non compatibles Librairies non compatibles JaCoCo (à la place de Cobertura) Log4j 2 (à la place de Log4j v1.x) et d'autres..... 22 . 7
  110. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 110/121 Que fait-on avec les anciens modules JavaEE ? Que fait-on avec les anciens modules JavaEE ? 22 . 8
  111. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 111/121 Symptomes Symptomes error: package javax.xml.bind.annotation does not exist error: cannot find symbol [ERROR] symbol: class XmlRootElement 22 . 9
  112. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 112/121 Correspondance Correspondance Nom Modules JAF com.sun.activation:javax.activation JTA javax.transaction:javax.transaction-api JAXB com.sun.xml.bind:jaxb-impl org.glassfish.jaxb:jaxb-runtime JAX-WS com.sun.xml.ws:javaws-ri Commons annotation javax.annotation:javax.annotation-api CORBA Pas de correspondance 22 . 10
  113. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 113/121 Utilisation d'anciennes classes Utilisation d'anciennes classes sun.misc.Base64 (remplacé par java.util.Base64) Méthodes peuvent être supprimées (add/removePropertyChangeListener) et d'autres..... 22 . 11
  114. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 114/121 Problème connu : URL Classloader Problème connu : URL Classloader Java 9 apporte un nouveau classloader Plus d'héritage avec URL Classloader 22 . 12
  115. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 115/121 Symptomes Symptomes Exception in thread "main" java.lang.ClassCastException: java.base/jdk.internal.loader.ClassLoaders$AppClassLoader cannot be cast to java.base/java.net.URLClassLoader 22 . 13
  116. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 116/121 Solutions Solutions Propriété java.class.path Utiliser les nouvelles classes (JDK 9 et + seulement) System.getProperty("java.class.path") 22 . 14
  117. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 117/121 Problème connu : Illegal Access To Internal Problème connu : Illegal Access To Internal APIs APIs Encapsulation forte introduite en Java 9 22 . 15
  118. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 118/121 Solutions Solutions Utiliser les options de la JVM : --illegal-access --add-exports --add-opens (setAccessible(true) 22 . 16
  119. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 119/121 Outils pour vous aider Outils pour vous aider jdeps plugin maven-jdeps 22 . 17
  120. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 120/121 Conclusion Conclusion 23 . 1
  121. 11/09/2019 Java 11, 12 sont sortis et bientôt le 13,

    c'est le moment de remplacer son JDK 8 localhost/presentation/2019-jdk11/?print-pdf 121/121 @Lilian_Benoit Conclusion Conclusion OpenJDK par défaut Choisir son calendrier Classpath n'est pas mort Profiter des nouveautés 23 . 2