SlideShare une entreprise Scribd logo
@aheritier @hboutemy#MvnDevoxxFr2015
Quand	
  Java	
  prend	
  de	
  la	
  vitesse,	
  
Apache	
  Maven	
  vous	
  garde	
  sur	
  les	
  rails	
  
Hervé Boutemy - @hboutemy
Arnaud Héritier - @aheritier
Objec:f	
  
Avec Apache Maven,
appréhendez en toute sérénité les évolutions de Java
@aheritier @hboutemy#MvnDevoxxFr2015
Au	
  menu	
  de	
  ce	
  Tools	
  in	
  Ac:on	
  
Apéritif
Cocktail de java duke et maven owl
Entrée
Une soupe de bytecode relevée d’une pointe d’enforcer
Plat
Une pièce d’Animal Sniffer et ses petits légumes
Dessert
Le toolchain & sa diligence de JDKs
@aheritier @hboutemy#MvnDevoxxFr2015
Qui sommes nous ?
@aheritier @hboutemy#MvnDevoxxFr2015
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, …
@aheritier @hboutemy#MvnDevoxxFr2015
Arnaud	
  Héri:er	
  
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
@aheritier @hboutemy#MvnDevoxxFr2015
De quoi parle-t’on ?
@aheritier @hboutemy#MvnDevoxxFr2015
Apache	
  Maven	
  et	
  vous	
  
Qui utilise Maven ?
Quelle version utilisez-vous majoritairement ?
●  3.3 ?
●  3.2 ?
●  3.1?
●  3.0 ?
●  < 3.0 ?
@aheritier @hboutemy#MvnDevoxxFr2015
On	
  va	
  vous	
  apprendre	
  à	
  jongler	
  
Jongler entre les différentes
versions de Java
Pour tirer profit des
nouveautés offertes par Java
Pour assurer la
compatibilité par rapport à
la cible de production
Java a 20 ans
Version	
   Première	
  publica2on	
  
JDK	
  Alpha	
  and	
  Beta	
   1995	
  
JDK	
  1.0	
   January,	
  1996	
  
JDK	
  1.1	
   February,	
  1997	
  
J2SE	
  1.2	
  (playground)	
   December,	
  1998	
  
J2SE	
  1.3	
  (kestrel)	
   May,	
  2000	
  
J2SE	
  1.4	
  (merlin)	
   February,	
  2002	
  
J2SE	
  5.0	
  (:ger)	
   September,	
  2004	
  
Java	
  SE	
  6	
  (mustang)	
   December,	
  2006	
  
Java	
  SE	
  7	
  (dolphin)	
   July,	
  2011	
  
Java	
  SE	
  8	
   March,	
  2014	
  
Java	
  SE	
  9	
   Early	
  2016	
  
6
7 8
@aheritier @hboutemy#MvnDevoxxFr2015
Java	
  et	
  vous	
  
Qui utilise majoritairement
La version 9 en développement ?
La version 8 en développement ?
La version 7 en développement ?
La version 6 en développement ?
La version <6 en développement ?
En production ?
En production ?
En production ?
En production ?
En production ?
@aheritier @hboutemy#MvnDevoxxFr2015
Java	
  et	
  vous	
  
Qui utilise sur son poste de développement plusieurs
versions de Java et en change régulièrement ?
Qui utilise une version de Java en développement
différente de celle de production?
@aheritier @hboutemy#MvnDevoxxFr2015
Le	
  dilemne	
  du	
  choix	
  du	
  JDK	
  
Tentation du développeur : outils de build récents, avec plus de features,
nécessitant un JDK récent
Exigence du manager : garantir la compatibilité avec l’environnement
d’exécution cible : JRE souvent ancien (et parc homogène ?)
Plusieurs stratégies :
●  Conservateur : JDK = min( JRE de toutes les applis ) + vieux outils associés…
●  Courageux : switch de JDK et outils associés à chaque appli
●  Joueur (inconscient ?) : JDK récent
●  Sérieux : JDK récent + CI et tests approfondis, avec bonne couverture
●  Malin : Maven + quelques configurations
@aheritier @hboutemy#MvnDevoxxFr2015
Roadmap	
  Java	
  &	
  Apache	
  Maven	
  en	
  2009	
  
@aheritier @hboutemy#MvnDevoxxFr2015
Roadmap	
  Java	
  …	
  en	
  2009	
  …un	
  rien	
  plus	
  tard…	
  
@aheritier @hboutemy#MvnDevoxxFr2015
Roadmap	
  Java	
  &	
  Apache	
  Maven	
  début	
  2014	
  
@aheritier @hboutemy#MvnDevoxxFr2015
Roadmap	
  Java	
  &	
  Apache	
  Maven	
  aujourd’hui	
  
Sources :
http://www.oracle.com/technetwork/java/eol-135779.html
http://www.ibm.com/developerworks/java/jdk/lifecycle/
http://maven.apache.org/docs/history.html
@aheritier @hboutemy#MvnDevoxxFr2015
Version du bytecode
@aheritier @hboutemy#MvnDevoxxFr2015
Version	
  du	
  bytecode	
  
Compatibilité binaire ascendante
●  JVM exécute du bytecode plus ancien
●  mais pas du bytecode plus récent, sinon…
java.lang.UnsupportedClassVersionError
Java 8 = 52 (0x34)
Java 7 = 51 (0x33)
Java 6 = 50 (0x32)
Java 5 = 49 (0x31)
Java 1.4 = 48 (0x30)
Java 1.3 = 47 (0x2F)
Java 1.2 = 46 (0x2E)
Java 1.1 = 45 (0x2D)
Format fichier .class
•  4 octets : magic number
•  2 octets : version mineure
•  2 octets : version majeure
•  …
@aheritier @hboutemy#MvnDevoxxFr2015
Demo
@aheritier @hboutemy#MvnDevoxxFr2015
Javac	
  &	
  version	
  du	
  bytecode	
  
Javac
●  par défaut, version bytecode = version du JDK utilisé
●  -target : fixe version du bytecode
@aheritier @hboutemy#MvnDevoxxFr2015
Maven	
  &	
  version	
  du	
  bytecode	
  
Maven permet de contrôler facilement la version de bytecode
du build du projet
●  par défaut, maven-compiler-plugin fixe -target à 1.5
=> indépendant du JDK utilisé
●  paramètre target du maven-compiler-plugin
●  configuration plugin ou pluginManagement
●  plus compact : property maven.compiler.target
@aheritier @hboutemy#MvnDevoxxFr2015
Maven	
  &	
  version	
  du	
  bytecode	
  
Maven permet de contrôler facilement la version de bytecode
des dépendances du projet
●  règle enforceBytecodeVersion du maven-enforcer-
plugin
@aheritier @hboutemy#MvnDevoxxFr2015
Animal Sniffer
@aheritier @hboutemy#MvnDevoxxFr2015
Demo
@aheritier @hboutemy#MvnDevoxxFr2015
Animal	
  Sniffer	
  –	
  Pourquoi	
  ?	
  
Pour vérifier qu’un code donné respecte les signatures
d’une API
Même	
  si	
  l’usage	
  le	
  plus	
  connu	
  est	
  le	
  contrôle	
  par	
  rapport	
  aux	
  APIs	
  	
  
du	
  JDK,	
  Animal	
  Sniffer	
  est	
  générique	
  et	
  peut	
  être	
  u:lisé	
  pour	
  	
  
n’importe	
  quelle	
  API,	
  à	
  condi:on	
  d’en	
  générer	
  une	
  signature	
  
@aheritier @hboutemy#MvnDevoxxFr2015
Animal	
  Sniffer	
  
Exemple
●  Même en compilant avec un JDK 8, notre code ne doit utiliser
que les APIs de Java 7
Comment ?
●  Existe sous 3 formes : plugin Maven, règle enforcer, tâche Ant.
●  Doit être executé sur les classes compilées.
Limitation
●  Il ne s’agit que d’un contrôle sur la signature des APIs.
●  Cela ne couvre pas leur sémantique.
@aheritier @hboutemy#MvnDevoxxFr2015
Toolchains & JDK
@aheritier @hboutemy#MvnDevoxxFr2015
Maven	
  Toolchains	
  :	
  l’arme	
  ul:me	
  
Permet d’utiliser un JDK pour compiler indépendant du JRE avec
lequel Maven et ses plugins s’exécutent
JDK de build = cible application != JRE d’exécution Maven
●  un JRE récent pour exécuter Maven et ses plugins
●  à chaque application buildée, le pom.xml fait sélection automatique du JDK de
la version exacte requise par l’application courante
JRE exécution
Maven  plugins
JRE exécution
application
JDK exécution
build (javac…)
Permet	
  de	
  jongler	
  facilement	
  entre	
  les	
  JDKs	
  pour	
  garan:r	
  qu’il	
  n’y	
  a	
  
aucun	
  risque	
  pour	
  l’applica:on	
  ciblée	
  (même	
  sans	
  CI	
  ni	
  tests	
  intensifs)
6
7 8
@aheritier @hboutemy#MvnDevoxxFr2015
Demo
@aheritier @hboutemy#MvnDevoxxFr2015
Maven	
  Toolchains	
  
Disponible depuis Maven 2.0.9 (4/2008)
1.  outils disponibles paramétrés (path…) dans un fichier 
~/.m2/toolchains.xml
2.  pom.xml configure le maven-toolchains-plugin pour
sélectionner les outils requis, avec les contraintes éventuelles
(version, autre…)
3.  les plugins « toolchain aware » utilisent les toolchains
sélectionnés sans recoder les contraintes
Les outils utilisés sont paramétrés en fonction de l’environnement
d’exécution, et homogènes entre plugins
@aheritier @hboutemy#MvnDevoxxFr2015
Maven	
  Toolchains	
  	
  JDK	
  
●  Générique : permet de gérer n’importe quel type de toolchain
●  Toolchain typejdk/type intégré dans Maven
●  Plugins « jdk-toolchain aware » :
●  m-compiler-p, m-javadoc-p, m-surefire-p, m-webstart-p, m-jarsigner-p, exec-
maven-plugin, keytool-maven-plugin, …
●  Des toolchains custom existent déjà :
●  protobuf, netbeans, …
@aheritier @hboutemy#MvnDevoxxFr2015
Actualités	
  récentes	
  Toolchains	
  
maven-toolchains-plugin 1.1 (2014/11)
●  messages d’exécution plus clairs
●  documentation pour écrire des types custom
Maven 3.3 (2015/3)
●  ${maven.home}/conf/toolchains.xml
●  possibilité pour un plugin d’utiliser un autre toolchain que celui
sélectionné par maven-toolchains-plugin
maven-jdeps-plugin (développement en cours)
●  utilise jdeps du JDK le plus récent (JDK 8 ou 9)
@aheritier @hboutemy#MvnDevoxxFr2015
Résumé
@aheritier @hboutemy#MvnDevoxxFr2015
Résumé	
  
Avec la roadmap Java qui s’étoffe ces derniers temps, le besoin
de mix de versions de Java va redevenir une
nécessité, avec des risques accrus d’incompatibilités
Avec Maven, vous êtes équipés pour :
●  vérifier automatiquement la compatibilité grâce à
Animal Sniffer et l’Enforcer, simplement en configurant vos
builds
●  utiliser le JDK adapté à chaque build en configurant
les Maven Toolchains dans vos environnements
@aheritier @hboutemy#MvnDevoxxFr2015
Demo - Bonus
●  Quand les optimisations du compilateur JDK 8 créent
une incompatibilité binaire
●  maven-jdeps-plugin
@aheritier @hboutemy#MvnDevoxxFr2015
Resources	
  
Animal Sniffer
●  http://mojo.codehaus.org/animal-sniffer/
Enforcer plugin
●  http://maven.apache.org/enforcer/maven-enforcer-plugin/
Toolchains
●  https://maven.apache.org/guides/mini/guide-using-toolchains.html
Démos
●  https://github.com/MavenDevoxxFR2015/demos
@aheritier @hboutemy#MvnDevoxxFr2015
Q  R
@aheritier @hboutemy#MvnDevoxxFr2015
Pour	
  discuter	
  plus	
  longuement	
  
Rendez vous au BOF
“Apache Maven, quel avenir?”
Quand ?
Demain, jeudi 9 avril 2015, de 21h30 à 22h30
Où ?
Salle Neuilly 253

Contenu connexe

PDF
Apache Maven 3
PPTX
Sonar-Hodson-Maven
PPT
20081113 - Nantes Jug - Apache Maven
PPT
20090615 - Ch'ti JUG - Apache Maven
PDF
JCertif 2012 : Maven par la pratique
PPTX
20080311 - Paris Vi Master STL TA - Initiation Maven
PPT
20091020 - Normandy Jug - Builders Battle
PPT
Présentation Maven
Apache Maven 3
Sonar-Hodson-Maven
20081113 - Nantes Jug - Apache Maven
20090615 - Ch'ti JUG - Apache Maven
JCertif 2012 : Maven par la pratique
20080311 - Paris Vi Master STL TA - Initiation Maven
20091020 - Normandy Jug - Builders Battle
Présentation Maven

Tendances (20)

PPTX
PDF
Formation Gratuite Total Tests par les experts Java Ippon
PDF
Presentation of GWT 2.4 (PDF version)
PDF
Presentation Rex Methodes Agiles
PPTX
20081008 - Tours Jug - Apache Maven
PDF
Presentation du socle technique Java open source Scub Foundation
PDF
gradle_lavajug
PPTX
Presentation of GWT 2.4 (PowerPoint version)
PDF
Gradle_LyonJUG
PDF
Soiree Maven 2
PPT
Une (simple) présentation de Apache Maven 2
PDF
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et Mobile
PPT
GWT Principes & Techniques
PPTX
Présentation1
PDF
Distribuer une librairie via maven
PPT
Node, Grunt et leurs copains qui font de l’accessibilité tout seuls !
PDF
Gradle_ToursJUG
PDF
Présentation Rex GWT 2.0
PDF
Objet Direct Formation Java pour devenir autonome
Formation Gratuite Total Tests par les experts Java Ippon
Presentation of GWT 2.4 (PDF version)
Presentation Rex Methodes Agiles
20081008 - Tours Jug - Apache Maven
Presentation du socle technique Java open source Scub Foundation
gradle_lavajug
Presentation of GWT 2.4 (PowerPoint version)
Gradle_LyonJUG
Soiree Maven 2
Une (simple) présentation de Apache Maven 2
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et Mobile
GWT Principes & Techniques
Présentation1
Distribuer une librairie via maven
Node, Grunt et leurs copains qui font de l’accessibilité tout seuls !
Gradle_ToursJUG
Présentation Rex GWT 2.0
Objet Direct Formation Java pour devenir autonome
Publicité

Similaire à Quand java prend de la vitesse, apache maven vous garde sur les rails (20)

PDF
Lyon JUG 2018 - Java le changement c'est maintenant
PDF
Maven et industrialisation du logiciel
PPTX
20081023 - Paris Vi Master STL TA - Initiation Maven
PPTX
Javaoop
PPTX
2018.11.15 Lyon JUG Maven 3&5 et java 9
PDF
I le langage java d'una manière avancée introduction
PPTX
Java 11 to 17 : What's new !?
PDF
501284603- Cours-Maven outils de build
PPTX
201806 Paris JUG Maven 3&5 et Java 9
PDF
Chap 02 poo en java
PDF
Maven2 - Philippe Kernevez - March 2009
PDF
Formation JAVA (1)
PDF
Devoxx 2018 Après Java 8, Java 9 et 10
PDF
meetup devops aix-marseille 2024-11 ----
PDF
2024-11 - meetup devops aix-marseille---
PDF
Java 9 modulo les modules devoxx fr 2017
KEY
Maven/Ivy vs OSGi (Toulouse Jug 26-05-2011)
DOCX
Java j2ee
PPTX
Spring Boot - Maven - ESPRIT Presentation
PPTX
Quoi d'9, JAVA 9 ?
Lyon JUG 2018 - Java le changement c'est maintenant
Maven et industrialisation du logiciel
20081023 - Paris Vi Master STL TA - Initiation Maven
Javaoop
2018.11.15 Lyon JUG Maven 3&5 et java 9
I le langage java d'una manière avancée introduction
Java 11 to 17 : What's new !?
501284603- Cours-Maven outils de build
201806 Paris JUG Maven 3&5 et Java 9
Chap 02 poo en java
Maven2 - Philippe Kernevez - March 2009
Formation JAVA (1)
Devoxx 2018 Après Java 8, Java 9 et 10
meetup devops aix-marseille 2024-11 ----
2024-11 - meetup devops aix-marseille---
Java 9 modulo les modules devoxx fr 2017
Maven/Ivy vs OSGi (Toulouse Jug 26-05-2011)
Java j2ee
Spring Boot - Maven - ESPRIT Presentation
Quoi d'9, JAVA 9 ?
Publicité

Plus de Arnaud Héritier (20)

PDF
From monolith to multi-services, how a platform engineering approach transfor...
PDF
Devops Recto-Verso @ DevoxxMA
PDF
Java is evolving rapidly: Maven helps you staying on track
PDF
Sonar In Action 20110302-vn
PDF
2014 August - eXo Software Factory Overview
PDF
CRaSH @ JUGSummerCamp 2012 - Quickie
PDF
LavaJUG-Maven 3.x, will it lives up to its promises
PDF
Hands on iOS developments with jenkins
PDF
eXo Software Factory Overview
PDF
Apache Maven - eXo TN presentation
PDF
Mobile developments at eXo
PDF
Jenkins User Meetup - eXo usages of Jenkins
PDF
ToursJUG-Maven 3.x, will it lives up to its promises
PDF
YaJUG-Maven 3.x, will it lives up to its promises
PDF
BordeauxJUG-Maven 3.x, will it lives up to its promises
PDF
ToulouseJUG-Maven 3.x, will it lives up to its promises
PPTX
Apache Maven - eXo VN office presentation
PDF
LyonJUG - Maven 3.x, will it live up to its promises?
PDF
Lorraine JUG (1st June, 2010) - Maven
PDF
Riviera JUG (20th April, 2010) - Maven
From monolith to multi-services, how a platform engineering approach transfor...
Devops Recto-Verso @ DevoxxMA
Java is evolving rapidly: Maven helps you staying on track
Sonar In Action 20110302-vn
2014 August - eXo Software Factory Overview
CRaSH @ JUGSummerCamp 2012 - Quickie
LavaJUG-Maven 3.x, will it lives up to its promises
Hands on iOS developments with jenkins
eXo Software Factory Overview
Apache Maven - eXo TN presentation
Mobile developments at eXo
Jenkins User Meetup - eXo usages of Jenkins
ToursJUG-Maven 3.x, will it lives up to its promises
YaJUG-Maven 3.x, will it lives up to its promises
BordeauxJUG-Maven 3.x, will it lives up to its promises
ToulouseJUG-Maven 3.x, will it lives up to its promises
Apache Maven - eXo VN office presentation
LyonJUG - Maven 3.x, will it live up to its promises?
Lorraine JUG (1st June, 2010) - Maven
Riviera JUG (20th April, 2010) - Maven

Quand java prend de la vitesse, apache maven vous garde sur les rails

  • 1. @aheritier @hboutemy#MvnDevoxxFr2015 Quand  Java  prend  de  la  vitesse,   Apache  Maven  vous  garde  sur  les  rails   Hervé Boutemy - @hboutemy Arnaud Héritier - @aheritier
  • 2. Objec:f   Avec Apache Maven, appréhendez en toute sérénité les évolutions de Java
  • 3. @aheritier @hboutemy#MvnDevoxxFr2015 Au  menu  de  ce  Tools  in  Ac:on   Apéritif Cocktail de java duke et maven owl Entrée Une soupe de bytecode relevée d’une pointe d’enforcer Plat Une pièce d’Animal Sniffer et ses petits légumes Dessert Le toolchain & sa diligence de JDKs
  • 5. @aheritier @hboutemy#MvnDevoxxFr2015 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, …
  • 6. @aheritier @hboutemy#MvnDevoxxFr2015 Arnaud  Héri:er   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
  • 8. @aheritier @hboutemy#MvnDevoxxFr2015 Apache  Maven  et  vous   Qui utilise Maven ? Quelle version utilisez-vous majoritairement ? ●  3.3 ? ●  3.2 ? ●  3.1? ●  3.0 ? ●  < 3.0 ?
  • 9. @aheritier @hboutemy#MvnDevoxxFr2015 On  va  vous  apprendre  à  jongler   Jongler entre les différentes versions de Java Pour tirer profit des nouveautés offertes par Java Pour assurer la compatibilité par rapport à la cible de production Java a 20 ans Version   Première  publica2on   JDK  Alpha  and  Beta   1995   JDK  1.0   January,  1996   JDK  1.1   February,  1997   J2SE  1.2  (playground)   December,  1998   J2SE  1.3  (kestrel)   May,  2000   J2SE  1.4  (merlin)   February,  2002   J2SE  5.0  (:ger)   September,  2004   Java  SE  6  (mustang)   December,  2006   Java  SE  7  (dolphin)   July,  2011   Java  SE  8   March,  2014   Java  SE  9   Early  2016   6 7 8
  • 10. @aheritier @hboutemy#MvnDevoxxFr2015 Java  et  vous   Qui utilise majoritairement La version 9 en développement ? La version 8 en développement ? La version 7 en développement ? La version 6 en développement ? La version <6 en développement ? En production ? En production ? En production ? En production ? En production ?
  • 11. @aheritier @hboutemy#MvnDevoxxFr2015 Java  et  vous   Qui utilise sur son poste de développement plusieurs versions de Java et en change régulièrement ? Qui utilise une version de Java en développement différente de celle de production?
  • 12. @aheritier @hboutemy#MvnDevoxxFr2015 Le  dilemne  du  choix  du  JDK   Tentation du développeur : outils de build récents, avec plus de features, nécessitant un JDK récent Exigence du manager : garantir la compatibilité avec l’environnement d’exécution cible : JRE souvent ancien (et parc homogène ?) Plusieurs stratégies : ●  Conservateur : JDK = min( JRE de toutes les applis ) + vieux outils associés… ●  Courageux : switch de JDK et outils associés à chaque appli ●  Joueur (inconscient ?) : JDK récent ●  Sérieux : JDK récent + CI et tests approfondis, avec bonne couverture ●  Malin : Maven + quelques configurations
  • 13. @aheritier @hboutemy#MvnDevoxxFr2015 Roadmap  Java  &  Apache  Maven  en  2009  
  • 14. @aheritier @hboutemy#MvnDevoxxFr2015 Roadmap  Java  …  en  2009  …un  rien  plus  tard…  
  • 15. @aheritier @hboutemy#MvnDevoxxFr2015 Roadmap  Java  &  Apache  Maven  début  2014  
  • 16. @aheritier @hboutemy#MvnDevoxxFr2015 Roadmap  Java  &  Apache  Maven  aujourd’hui   Sources : http://www.oracle.com/technetwork/java/eol-135779.html http://www.ibm.com/developerworks/java/jdk/lifecycle/ http://maven.apache.org/docs/history.html
  • 18. @aheritier @hboutemy#MvnDevoxxFr2015 Version  du  bytecode   Compatibilité binaire ascendante ●  JVM exécute du bytecode plus ancien ●  mais pas du bytecode plus récent, sinon… java.lang.UnsupportedClassVersionError Java 8 = 52 (0x34) Java 7 = 51 (0x33) Java 6 = 50 (0x32) Java 5 = 49 (0x31) Java 1.4 = 48 (0x30) Java 1.3 = 47 (0x2F) Java 1.2 = 46 (0x2E) Java 1.1 = 45 (0x2D) Format fichier .class •  4 octets : magic number •  2 octets : version mineure •  2 octets : version majeure •  …
  • 20. @aheritier @hboutemy#MvnDevoxxFr2015 Javac  &  version  du  bytecode   Javac ●  par défaut, version bytecode = version du JDK utilisé ●  -target : fixe version du bytecode
  • 21. @aheritier @hboutemy#MvnDevoxxFr2015 Maven  &  version  du  bytecode   Maven permet de contrôler facilement la version de bytecode du build du projet ●  par défaut, maven-compiler-plugin fixe -target à 1.5 => indépendant du JDK utilisé ●  paramètre target du maven-compiler-plugin ●  configuration plugin ou pluginManagement ●  plus compact : property maven.compiler.target
  • 22. @aheritier @hboutemy#MvnDevoxxFr2015 Maven  &  version  du  bytecode   Maven permet de contrôler facilement la version de bytecode des dépendances du projet ●  règle enforceBytecodeVersion du maven-enforcer- plugin
  • 25. @aheritier @hboutemy#MvnDevoxxFr2015 Animal  Sniffer  –  Pourquoi  ?   Pour vérifier qu’un code donné respecte les signatures d’une API Même  si  l’usage  le  plus  connu  est  le  contrôle  par  rapport  aux  APIs     du  JDK,  Animal  Sniffer  est  générique  et  peut  être  u:lisé  pour     n’importe  quelle  API,  à  condi:on  d’en  générer  une  signature  
  • 26. @aheritier @hboutemy#MvnDevoxxFr2015 Animal  Sniffer   Exemple ●  Même en compilant avec un JDK 8, notre code ne doit utiliser que les APIs de Java 7 Comment ? ●  Existe sous 3 formes : plugin Maven, règle enforcer, tâche Ant. ●  Doit être executé sur les classes compilées. Limitation ●  Il ne s’agit que d’un contrôle sur la signature des APIs. ●  Cela ne couvre pas leur sémantique.
  • 28. @aheritier @hboutemy#MvnDevoxxFr2015 Maven  Toolchains  :  l’arme  ul:me   Permet d’utiliser un JDK pour compiler indépendant du JRE avec lequel Maven et ses plugins s’exécutent JDK de build = cible application != JRE d’exécution Maven ●  un JRE récent pour exécuter Maven et ses plugins ●  à chaque application buildée, le pom.xml fait sélection automatique du JDK de la version exacte requise par l’application courante JRE exécution Maven plugins JRE exécution application JDK exécution build (javac…) Permet  de  jongler  facilement  entre  les  JDKs  pour  garan:r  qu’il  n’y  a   aucun  risque  pour  l’applica:on  ciblée  (même  sans  CI  ni  tests  intensifs) 6 7 8
  • 30. @aheritier @hboutemy#MvnDevoxxFr2015 Maven  Toolchains   Disponible depuis Maven 2.0.9 (4/2008) 1.  outils disponibles paramétrés (path…) dans un fichier ~/.m2/toolchains.xml 2.  pom.xml configure le maven-toolchains-plugin pour sélectionner les outils requis, avec les contraintes éventuelles (version, autre…) 3.  les plugins « toolchain aware » utilisent les toolchains sélectionnés sans recoder les contraintes Les outils utilisés sont paramétrés en fonction de l’environnement d’exécution, et homogènes entre plugins
  • 31. @aheritier @hboutemy#MvnDevoxxFr2015 Maven  Toolchains    JDK   ●  Générique : permet de gérer n’importe quel type de toolchain ●  Toolchain typejdk/type intégré dans Maven ●  Plugins « jdk-toolchain aware » : ●  m-compiler-p, m-javadoc-p, m-surefire-p, m-webstart-p, m-jarsigner-p, exec- maven-plugin, keytool-maven-plugin, … ●  Des toolchains custom existent déjà : ●  protobuf, netbeans, …
  • 32. @aheritier @hboutemy#MvnDevoxxFr2015 Actualités  récentes  Toolchains   maven-toolchains-plugin 1.1 (2014/11) ●  messages d’exécution plus clairs ●  documentation pour écrire des types custom Maven 3.3 (2015/3) ●  ${maven.home}/conf/toolchains.xml ●  possibilité pour un plugin d’utiliser un autre toolchain que celui sélectionné par maven-toolchains-plugin maven-jdeps-plugin (développement en cours) ●  utilise jdeps du JDK le plus récent (JDK 8 ou 9)
  • 34. @aheritier @hboutemy#MvnDevoxxFr2015 Résumé   Avec la roadmap Java qui s’étoffe ces derniers temps, le besoin de mix de versions de Java va redevenir une nécessité, avec des risques accrus d’incompatibilités Avec Maven, vous êtes équipés pour : ●  vérifier automatiquement la compatibilité grâce à Animal Sniffer et l’Enforcer, simplement en configurant vos builds ●  utiliser le JDK adapté à chaque build en configurant les Maven Toolchains dans vos environnements
  • 35. @aheritier @hboutemy#MvnDevoxxFr2015 Demo - Bonus ●  Quand les optimisations du compilateur JDK 8 créent une incompatibilité binaire ●  maven-jdeps-plugin
  • 36. @aheritier @hboutemy#MvnDevoxxFr2015 Resources   Animal Sniffer ●  http://mojo.codehaus.org/animal-sniffer/ Enforcer plugin ●  http://maven.apache.org/enforcer/maven-enforcer-plugin/ Toolchains ●  https://maven.apache.org/guides/mini/guide-using-toolchains.html Démos ●  https://github.com/MavenDevoxxFR2015/demos
  • 38. @aheritier @hboutemy#MvnDevoxxFr2015 Pour  discuter  plus  longuement   Rendez vous au BOF “Apache Maven, quel avenir?” Quand ? Demain, jeudi 9 avril 2015, de 21h30 à 22h30 Où ? Salle Neuilly 253