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

[FR] Apache Maven, Java 9 et le projet Jigsaw @ Devoxx France 2016

[FR] Apache Maven, Java 9 et le projet Jigsaw @ Devoxx France 2016

Vous avez entendu parler des nouveautés de Java 9 ? JDeps, Modules, Multi-Release JAR, nouvelle numérotation des versions, compilation pour les anciennes plateformes : venez découvrir ces fonctionnalités par l'exemple et comment Apache Maven va vous aider à les utiliser.

Cdbe99fe3d6af6a18dd8c35b0687a50b?s=128

Arnaud Heritier

April 22, 2016
Tweet

Transcript

  1. #DevoxxFR Apache Maven, Java 9 et le projet Jigsaw Hervé

    Boutemy @hboutemy Arnaud Héritier @aheritier 1
  2. #DevoxxFR Aujourd’hui • Introduction à Java 9 • Java 9

    et Apache Maven • Statut du support des modules Jigsaw dans Apache Maven • Multi-Release JAR Files
  3. #DevoxxFR Qui sommes nous ?

  4. #DevoxxFR Hervé Boutemy Committer Maven depuis 2007, Membre du PMC

    Maven depuis 2009, Membre de la Fondation Apache depuis 2011, Maven PMC Chair depuis juillet 2014, Touche à tout sur l'ensemble du code Apache Maven... • Encoding, Maven Ant Tasks, Modello, maven-site-plugin, Doxia, • Archetype, Plugin Tools, • maven-checkstyle-plugin, Toolchains • et maintenanttout ce qui touche à Java9/Jigsaw…
  5. #DevoxxFR Arnaud Héritier Committer Maven depuis 2004, Membre du PMC

    Maven depuis 2005, Membre de la Fondation Apache depuis 2011, Ne touche surtout plus au code... mais en parle beaucoup ! http://git.io/jEFs
  6. #DevoxxFR Java 9

  7. #DevoxxFR Java Roadmap 2005 2010 2015 2020 Java 5 Java

    6 Java 7 Java 8 3.0 3.2 3.3 Support Editeurs public IBM Oracle premier extended 1.0 β2 Apache Maven 2.0 2.2 2016-04 Java 9
  8. #DevoxxFR Java 9 https://jdk9.java.net/ Contenu & schedule : http://openjdk.java.net/projects/jdk9/ Java

    9 disponible en 2 éditions : • Classique https://jdk9.java.net/download/ • Jigsaw https://jdk9.java.net/jigsaw/ (18/4/2016) build 114 http://www.java9countdown.xyz/
  9. #DevoxxFR Demo Premier contact, premiers retours d’expérience… https://github.com/MavenDemo/maven-java9-jigsaw-fr/contact/

  10. #DevoxxFR JEP 223 : New Version-String Scheme • Nouveau schéma

    « majeur.mineur.security » • Nouvelle API (« JDK specific ») Retours d’expérience : - Va causer des soucis dans tout code qui parse la version sur un format « 1.x », la liste est longue et les conséquences variées (de warn à fail)… - Bytecode 52.0 (Java 8) va passer en 53.0 http://mail.openjdk.java.net/pipermail/jdk9-dev/2016-January/003507.html - API jdk.Version devrait devenir java.lang.Runtime.Version https://bugs.openjdk.java.net/browse/JDK-8144062 http://openjdk.java.net/jeps/223 Project Verona Integrated Issue Issue Issue
  11. #DevoxxFR JEP 224 : HTML5 Javadoc JEP 225 : Javadoc

    Search • Provide an option to javadoc to request either HTML 4 (-html4) or HTML5 (-html5) output. The HTML5 markup should be semantic, i.e., clearly separate meaning from style and content. The pages generated using HTML5 markup should satisfy accessibility requirements. • Add a search box to generated API documentation that can be used to search for program elements and tagged words and phrases within the documentation. The search box will appear in the header of all pages that are displayed in the main right hand frame. Completed Completed http://openjdk.java.net/jeps/224 http://openjdk.java.net/jeps/225
  12. #DevoxxFR Apache Maven & Java 9

  13. #DevoxxFR Scénario ultime: - Maven multi- module définissant des modules

    Jigsaw - Unit tests Surefire - Multi-Release JAR dont Java 9 et Java 10 (évolution modules) FOSDEM 2016 – meeting Maven devs & Mark Reinhold
  14. #DevoxxFR Principes - pas de révolution, Maven 3.0+ fonctionne -

    mais ce sont surtout des plugins qui auront des versions minimales (plugins Apache Maven ou plugins tiers) - Une page Wiki a été créée pour centraliser l’information : https://cwiki.apache.org/confluence/display/MAVEN/Java+9+-+Jigsaw - Travaux en cours pour builder du code modulaire Jigsaw - Tout évolue encore, y compris au niveau JDK… Integrated Targeted Completed Issue
  15. #DevoxxFR Premier test en grandeur réelle Compiler Maven avec Maven

    & JDK 9 jigsaw > mvn install
  16. #DevoxxFR Demo mvn install https://github.com/MavenDemo/maven-java9-jigsaw-fr/maven-core-master-branch/

  17. #DevoxxFR Résultat : ça marche pô • Un plugin à

    upgrader… mvn –DplexusVersion=1.7-SNAPSHOT package • Cause : La modularisation du JDK (y compris classique) pose actuellement des problèmes d’accès au bytecode JRE http://openjdk.java.net/projects/jigsaw/spec/issues/#ClassFilesAsResources [INFO] Maven Model Builder ................................ FAILURE [ 1.783 s] ... [INFO] ------------------------------------------------------------------------ [INFO] BUILD FAILURE [INFO] ------------------------------------------------------------------------ [ERROR] Failed to execute goal org.codehaus.plexus:plexus-component- metadata:1.6:generate-metadata (default) on project maven-model-builder: Error generating metadata: Failed to extract descriptors: Can't read class java/lang/Object: Class not found -> [Help 1] Issue Issue Issue Issue
  18. #DevoxxFR Apache Maven & Modules Jigsaw

  19. #DevoxxFR JEP 261 : Module System Implement the Java Platform

    Module System, as specified by JSR 376, together with related JDK-specific changes and enhancements. This JEP assumes that the reader is familiar with the latest State of the Module System document and also the earlier Project Jigsaw JEPs: • 200: The Modular JDK • 201: Modular Source Code • 220: Modular Run-Time Images • 260: Encapsulate Most Internal APIs • 282: jlink: The Java Linker http://openjdk.java.net/jeps/261 Integrated
  20. #DevoxxFR State of the Module System Goals: Reliable configuration +

    Strong encapsulation http://openjdk.java.net/projects/jigsaw/spec/sotms/ • Classpath vs Modulepath • Automatic Module • Unnamed Module
  21. #DevoxxFR Demo Petit exemple https://github.com/MavenDemo/maven-java9-jigsaw-fr/jigsaw/

  22. #DevoxxFR The State of Maven Jigsaw Support https://cwiki.apache.org/confluence/display/MAVEN/Java+9+-+Jigsaw • Compilation

    avec modules nécessite maven-compiler- plugin 3.6-jigsaw-SNAPSHOT (build yourself) • Reste à faire : tests unitaires par Surefire • maven-jdeps-plugin pour s’initier à jdeps
  23. #DevoxxFR Demo Maven as Jigsaw Modules https://github.com/MavenDemo/maven-java9-jigsaw-fr/maven-core-jigsaw-branch/

  24. #DevoxxFR Maven as Jigsaw modules ? • Travaux en cours

    : branche jigsaw, qui ajoute quelques modules-info.java • Nécessité de corriger tous les petits arrangements historiques, en particulier maven-compat => gros travaux sur les plugins en version 3.x.x • Nécessaire mais pas suffisant… • Pas un objectif à ce stade
  25. #DevoxxFR Apache Maven & Multi Release JAR

  26. #DevoxxFR JEP 238 : Multi-Release JAR Files http://openjdk.java.net/jeps/238 Objectif :

    éviter l’utilisation de reflection pour du code optimisé pour de nouvelles API ou du code utilisant des API rendues inaccessibles voire supprimées Avant : reflection dans du code classique if (isJavaX()) { optimisation } else { defaut } Après : override automatique par runtime A.class : implémentation par défaut, META-INF/versions/X/A.class : optimisation META-INF/MANIFEST.MF contient Multi-Release: true Remarque : le passage de l’un à l’autre mérite refactoring pour extraire des petites classes faciles à réécrire totalement Targeted
  27. #DevoxxFR JEP 238 : Problèmes • Comment compiler un projet

    possédant plusieurs répertoires de sources, chacun devant être compilé avec une configuration différente ? • Comment cela se passera-t’il dans un IDE ? • Solution Maven : No magic JEP238 multimodule pattern https://github.com/hboutemy/maven-jep238
  28. #DevoxxFR JEP 238 : Solution Maven artifact (reflection) artifact-parent (pom)

    artifact-jbase (base) artifact-j8 (override) artifact-j9 (override) artifact (assembly) Avant : Après : 1 module par version + assembly • pas d’install/deploy • toolchain ou JEP 247 • assembly • Multi-Release: true • reprise des dépendances
  29. #DevoxxFR Demo https://github.com/MavenDemo/maven-java9-jigsaw-fr/maven-jep238/

  30. #DevoxxFR JEP 247: Compile for Older Platform Versions Plus besoin

    d’animal-sniffer ou de Toolchains pour compiler… Summary Enhance javac so that it can compile Java programs to run on selected older versions of the platform. Description We defined a new command-line option, -release, which automatically configures the compiler to produce class files that will link against an implementation of the given platform version. -release N is equivalent to -source N -target N -bootclasspath <bootclasspath-from-N> http://openjdk.java.net/jeps/247 Completed
  31. #DevoxxFR Références • Démos de cette année : https://github.com/MavenDemo/maven-java9-jigsaw-fr •

    Merci à ceux qui ont contribué : - Robert Scholte (Maven PMC), - Alan Bateman, Mark Reinhold, Rory O’Donnell (Oracle)
  32. #DevoxxFR Restez informés • maven-dev mailing list, préfixe [Jigsaw] •

    Page Wiki des versions minimum de plugin : https://cwiki.apache.org/confluence/display/MAVEN/Java+9+-+Jigsaw Integrated Targeted Completed Issue
  33. #DevoxxFR Thanks 33