Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

#DevoxxFR Aujourd’hui • Introduction à Java 9 • Java 9 et Apache Maven • Statut du support des modules Jigsaw dans Apache Maven • Multi-Release JAR Files

Slide 3

Slide 3 text

#DevoxxFR Qui sommes nous ?

Slide 4

Slide 4 text

#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…

Slide 5

Slide 5 text

#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

Slide 6

Slide 6 text

#DevoxxFR Java 9

Slide 7

Slide 7 text

#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

Slide 8

Slide 8 text

#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/

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

#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

Slide 11

Slide 11 text

#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

Slide 12

Slide 12 text

#DevoxxFR Apache Maven & Java 9

Slide 13

Slide 13 text

#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

Slide 14

Slide 14 text

#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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

#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

Slide 18

Slide 18 text

#DevoxxFR Apache Maven & Modules Jigsaw

Slide 19

Slide 19 text

#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

Slide 20

Slide 20 text

#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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

#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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

#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

Slide 25

Slide 25 text

#DevoxxFR Apache Maven & Multi Release JAR

Slide 26

Slide 26 text

#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

Slide 27

Slide 27 text

#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

Slide 28

Slide 28 text

#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

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

#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

Slide 31

Slide 31 text

#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)

Slide 32

Slide 32 text

#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

Slide 33

Slide 33 text

#DevoxxFR Thanks 33