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.

Arnaud Heritier

April 22, 2016
Tweet

More Decks by Arnaud Heritier

Other Decks in Technology

Transcript

  1. #DevoxxFR
    Apache Maven, Java 9
    et le projet Jigsaw
    Hervé Boutemy @hboutemy
    Arnaud Héritier @aheritier
    1

    View Slide

  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

    View Slide

  3. #DevoxxFR
    Qui sommes nous ?

    View Slide

  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…

    View Slide

  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

    View Slide

  6. #DevoxxFR
    Java 9

    View Slide

  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

    View Slide

  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/

    View Slide

  9. #DevoxxFR
    Demo
    Premier contact,
    premiers retours d’expérience…
    https://github.com/MavenDemo/maven-java9-jigsaw-fr/contact/

    View Slide

  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

    View Slide

  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

    View Slide

  12. #DevoxxFR
    Apache Maven & Java 9

    View Slide

  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

    View Slide

  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

    View Slide

  15. #DevoxxFR
    Premier test en grandeur réelle
    Compiler Maven avec Maven & JDK 9 jigsaw
    > mvn install

    View Slide

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

    View Slide

  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

    View Slide

  18. #DevoxxFR
    Apache Maven
    & Modules Jigsaw

    View Slide

  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

    View Slide

  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

    View Slide

  21. #DevoxxFR
    Demo
    Petit exemple
    https://github.com/MavenDemo/maven-java9-jigsaw-fr/jigsaw/

    View Slide

  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

    View Slide

  23. #DevoxxFR
    Demo
    Maven as Jigsaw Modules
    https://github.com/MavenDemo/maven-java9-jigsaw-fr/maven-core-jigsaw-branch/

    View Slide

  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

    View Slide

  25. #DevoxxFR
    Apache Maven
    & Multi Release JAR

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  29. #DevoxxFR
    Demo
    https://github.com/MavenDemo/maven-java9-jigsaw-fr/maven-jep238/

    View Slide

  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
    http://openjdk.java.net/jeps/247
    Completed

    View Slide

  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)

    View Slide

  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

    View Slide

  33. #DevoxxFR
    Thanks
    33

    View Slide