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

Tendances

Maven
MavenMaven
Formation Gratuite Total Tests par les experts Java Ippon
Formation Gratuite Total Tests par les experts Java Ippon Formation Gratuite Total Tests par les experts Java Ippon
Formation Gratuite Total Tests par les experts Java Ippon
Ippon
 
Presentation of GWT 2.4 (PDF version)
Presentation of GWT 2.4 (PDF version)Presentation of GWT 2.4 (PDF version)
Presentation of GWT 2.4 (PDF version)
Celinio Fernandes
 
Presentation Rex Methodes Agiles
Presentation Rex Methodes AgilesPresentation Rex Methodes Agiles
Presentation Rex Methodes Agiles
Ippon
 
20081008 - Tours Jug - Apache Maven
20081008  - Tours Jug - Apache Maven20081008  - Tours Jug - Apache Maven
20081008 - Tours Jug - Apache Maven
Arnaud Héritier
 
Presentation du socle technique Java open source Scub Foundation
Presentation du socle technique Java open source Scub FoundationPresentation du socle technique Java open source Scub Foundation
Presentation du socle technique Java open source Scub Foundation
Stéphane Traumat
 
Presentation of GWT 2.4 (PowerPoint version)
Presentation of GWT 2.4 (PowerPoint version)Presentation of GWT 2.4 (PowerPoint version)
Presentation of GWT 2.4 (PowerPoint version)
Celinio Fernandes
 
Soiree Maven 2
Soiree Maven 2Soiree Maven 2
Soiree Maven 2
Laurent RUAUD
 
Une (simple) présentation de Apache Maven 2
Une (simple) présentation de Apache Maven 2Une (simple) présentation de Apache Maven 2
Une (simple) présentation de Apache Maven 2teejug
 
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et Mobile
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et MobileNouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et Mobile
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et Mobile
Ippon
 
GWT Principes & Techniques
GWT Principes & TechniquesGWT Principes & Techniques
GWT Principes & Techniques
Rachid NID SAID
 
Présentation1
Présentation1Présentation1
Présentation1
Boulkenafet samir
 
Distribuer une librairie via maven
Distribuer une librairie via mavenDistribuer une librairie via maven
Distribuer une librairie via maven
Franck SIMON
 
Maven
MavenMaven
Node, Grunt et leurs copains qui font de l’accessibilité tout seuls !
Node, Grunt et leurs copains qui font de l’accessibilité tout seuls !Node, Grunt et leurs copains qui font de l’accessibilité tout seuls !
Node, Grunt et leurs copains qui font de l’accessibilité tout seuls !
vincent aniort
 
Présentation Rex GWT 2.0
Présentation Rex GWT 2.0Présentation Rex GWT 2.0
Présentation Rex GWT 2.0
Ippon
 
Objet Direct Formation Java pour devenir autonome
Objet Direct Formation Java pour devenir autonomeObjet Direct Formation Java pour devenir autonome
Objet Direct Formation Java pour devenir autonome
formationobjetdirect
 

Tendances (20)

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

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

Gérer son environnement de développement avec Docker
Gérer son environnement de développement avec DockerGérer son environnement de développement avec Docker
Gérer son environnement de développement avec Docker
Julien Dubois
 
Être productif avec JHipster - Devoxx France 2017
Être productif avec JHipster - Devoxx France 2017Être productif avec JHipster - Devoxx France 2017
Être productif avec JHipster - Devoxx France 2017
Julien Dubois
 
Voxxeddays lux 2018 apres java 8, java 9 et 10
Voxxeddays lux 2018 apres java 8, java 9 et 10Voxxeddays lux 2018 apres java 8, java 9 et 10
Voxxeddays lux 2018 apres java 8, java 9 et 10
Jean-Michel Doudoux
 
Maven et industrialisation du logiciel
Maven et industrialisation du logicielMaven et industrialisation du logiciel
Maven et industrialisation du logiciel
ENSET, Université Hassan II Casablanca
 
Javascript as a first programming language : votre IC prête pour la révolution !
Javascript as a first programming language : votre IC prête pour la révolution !Javascript as a first programming language : votre IC prête pour la révolution !
Javascript as a first programming language : votre IC prête pour la révolution !
VISEO
 
Devoxx java script-1280-720
Devoxx java script-1280-720Devoxx java script-1280-720
Devoxx java script-1280-720
Romain Linsolas
 
Annotation Processor, trésor caché de la JVM
Annotation Processor, trésor caché de la JVMAnnotation Processor, trésor caché de la JVM
Annotation Processor, trésor caché de la JVM
Raphaël Brugier
 
Scub Foundation, usine logicielle Java libre
Scub Foundation, usine logicielle Java libreScub Foundation, usine logicielle Java libre
Scub Foundation, usine logicielle Java libre
Stéphane Traumat
 
Java uik-chap1-intro java
Java uik-chap1-intro javaJava uik-chap1-intro java
Java uik-chap1-intro javaAmel Morchdi
 
20081023 - Paris Vi Master STL TA - Initiation Maven
20081023 - Paris Vi Master STL TA - Initiation Maven20081023 - Paris Vi Master STL TA - Initiation Maven
20081023 - Paris Vi Master STL TA - Initiation Maven
Arnaud Héritier
 
Spring Boot RestApi.pptx
Spring Boot RestApi.pptxSpring Boot RestApi.pptx
Devoxx 2017 : toutes les actualités technologiques à surveiller !
Devoxx 2017 : toutes les actualités technologiques à surveiller !Devoxx 2017 : toutes les actualités technologiques à surveiller !
Devoxx 2017 : toutes les actualités technologiques à surveiller !
Société ELOSI
 
Node.js
Node.jsNode.js
Usine Logicielle 2013
Usine Logicielle 2013Usine Logicielle 2013
Usine Logicielle 2013
Stéphane Liétard
 
Angular.pdf
Angular.pdfAngular.pdf
Angular.pdf
Jaouad Assabbour
 
Gwt présentation-jug-14avr2011
Gwt présentation-jug-14avr2011Gwt présentation-jug-14avr2011
Gwt présentation-jug-14avr2011
Montreal JUG
 
Présentation GWT au JUG Montréal 14 avril 2011
Présentation GWT au JUG Montréal 14 avril 2011Présentation GWT au JUG Montréal 14 avril 2011
Présentation GWT au JUG Montréal 14 avril 2011
Claude Coulombe
 
formations java.pdf
formations java.pdfformations java.pdf
formations java.pdf
Ghislain13
 
Integrons en mode continu
Integrons en mode continuIntegrons en mode continu
Integrons en mode continu
neuros
 

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

Gérer son environnement de développement avec Docker
Gérer son environnement de développement avec DockerGérer son environnement de développement avec Docker
Gérer son environnement de développement avec Docker
 
Être productif avec JHipster - Devoxx France 2017
Être productif avec JHipster - Devoxx France 2017Être productif avec JHipster - Devoxx France 2017
Être productif avec JHipster - Devoxx France 2017
 
Voxxeddays lux 2018 apres java 8, java 9 et 10
Voxxeddays lux 2018 apres java 8, java 9 et 10Voxxeddays lux 2018 apres java 8, java 9 et 10
Voxxeddays lux 2018 apres java 8, java 9 et 10
 
Maven et industrialisation du logiciel
Maven et industrialisation du logicielMaven et industrialisation du logiciel
Maven et industrialisation du logiciel
 
Javascript as a first programming language : votre IC prête pour la révolution !
Javascript as a first programming language : votre IC prête pour la révolution !Javascript as a first programming language : votre IC prête pour la révolution !
Javascript as a first programming language : votre IC prête pour la révolution !
 
Devoxx java script-1280-720
Devoxx java script-1280-720Devoxx java script-1280-720
Devoxx java script-1280-720
 
Annotation Processor, trésor caché de la JVM
Annotation Processor, trésor caché de la JVMAnnotation Processor, trésor caché de la JVM
Annotation Processor, trésor caché de la JVM
 
Scub Foundation, usine logicielle Java libre
Scub Foundation, usine logicielle Java libreScub Foundation, usine logicielle Java libre
Scub Foundation, usine logicielle Java libre
 
Java uik-chap1-intro java
Java uik-chap1-intro javaJava uik-chap1-intro java
Java uik-chap1-intro java
 
Maven
MavenMaven
Maven
 
20081023 - Paris Vi Master STL TA - Initiation Maven
20081023 - Paris Vi Master STL TA - Initiation Maven20081023 - Paris Vi Master STL TA - Initiation Maven
20081023 - Paris Vi Master STL TA - Initiation Maven
 
Spring Boot RestApi.pptx
Spring Boot RestApi.pptxSpring Boot RestApi.pptx
Spring Boot RestApi.pptx
 
Devoxx 2017 : toutes les actualités technologiques à surveiller !
Devoxx 2017 : toutes les actualités technologiques à surveiller !Devoxx 2017 : toutes les actualités technologiques à surveiller !
Devoxx 2017 : toutes les actualités technologiques à surveiller !
 
Node.js
Node.jsNode.js
Node.js
 
Usine Logicielle 2013
Usine Logicielle 2013Usine Logicielle 2013
Usine Logicielle 2013
 
Angular.pdf
Angular.pdfAngular.pdf
Angular.pdf
 
Gwt présentation-jug-14avr2011
Gwt présentation-jug-14avr2011Gwt présentation-jug-14avr2011
Gwt présentation-jug-14avr2011
 
Présentation GWT au JUG Montréal 14 avril 2011
Présentation GWT au JUG Montréal 14 avril 2011Présentation GWT au JUG Montréal 14 avril 2011
Présentation GWT au JUG Montréal 14 avril 2011
 
formations java.pdf
formations java.pdfformations java.pdf
formations java.pdf
 
Integrons en mode continu
Integrons en mode continuIntegrons en mode continu
Integrons en mode continu
 

Plus de Arnaud Héritier

Devops Recto-Verso @ DevoxxMA
Devops Recto-Verso @ DevoxxMADevops Recto-Verso @ DevoxxMA
Devops Recto-Verso @ DevoxxMA
Arnaud Héritier
 
Java is evolving rapidly: Maven helps you staying on track
Java is evolving rapidly:  Maven helps you staying on trackJava is evolving rapidly:  Maven helps you staying on track
Java is evolving rapidly: Maven helps you staying on track
Arnaud Héritier
 
Sonar In Action 20110302-vn
Sonar In Action 20110302-vnSonar In Action 20110302-vn
Sonar In Action 20110302-vn
Arnaud Héritier
 
2014 August - eXo Software Factory Overview
2014 August - eXo Software Factory Overview2014 August - eXo Software Factory Overview
2014 August - eXo Software Factory Overview
Arnaud Héritier
 
CRaSH @ JUGSummerCamp 2012 - Quickie
CRaSH @ JUGSummerCamp 2012 - QuickieCRaSH @ JUGSummerCamp 2012 - Quickie
CRaSH @ JUGSummerCamp 2012 - Quickie
Arnaud Héritier
 
LavaJUG-Maven 3.x, will it lives up to its promises
LavaJUG-Maven 3.x, will it lives up to its promisesLavaJUG-Maven 3.x, will it lives up to its promises
LavaJUG-Maven 3.x, will it lives up to its promises
Arnaud Héritier
 
Hands on iOS developments with jenkins
Hands on iOS developments with jenkinsHands on iOS developments with jenkins
Hands on iOS developments with jenkins
Arnaud Héritier
 
eXo Software Factory Overview
eXo Software Factory OvervieweXo Software Factory Overview
eXo Software Factory Overview
Arnaud Héritier
 
Apache Maven - eXo TN presentation
Apache Maven - eXo TN presentationApache Maven - eXo TN presentation
Apache Maven - eXo TN presentation
Arnaud Héritier
 
Mobile developments at eXo
Mobile developments at eXoMobile developments at eXo
Mobile developments at eXo
Arnaud Héritier
 
Jenkins User Meetup - eXo usages of Jenkins
Jenkins User Meetup - eXo usages of JenkinsJenkins User Meetup - eXo usages of Jenkins
Jenkins User Meetup - eXo usages of Jenkins
Arnaud Héritier
 
ToursJUG-Maven 3.x, will it lives up to its promises
ToursJUG-Maven 3.x, will it lives up to its promisesToursJUG-Maven 3.x, will it lives up to its promises
ToursJUG-Maven 3.x, will it lives up to its promises
Arnaud Héritier
 
YaJUG-Maven 3.x, will it lives up to its promises
YaJUG-Maven 3.x, will it lives up to its promisesYaJUG-Maven 3.x, will it lives up to its promises
YaJUG-Maven 3.x, will it lives up to its promises
Arnaud Héritier
 
BordeauxJUG-Maven 3.x, will it lives up to its promises
BordeauxJUG-Maven 3.x, will it lives up to its promisesBordeauxJUG-Maven 3.x, will it lives up to its promises
BordeauxJUG-Maven 3.x, will it lives up to its promises
Arnaud Héritier
 
ToulouseJUG-Maven 3.x, will it lives up to its promises
ToulouseJUG-Maven 3.x, will it lives up to its promisesToulouseJUG-Maven 3.x, will it lives up to its promises
ToulouseJUG-Maven 3.x, will it lives up to its promises
Arnaud Héritier
 
Apache Maven - eXo VN office presentation
Apache Maven - eXo VN office presentationApache Maven - eXo VN office presentation
Apache Maven - eXo VN office presentation
Arnaud Héritier
 
LyonJUG - Maven 3.x, will it live up to its promises?
LyonJUG - Maven 3.x, will it live up to its promises?LyonJUG - Maven 3.x, will it live up to its promises?
LyonJUG - Maven 3.x, will it live up to its promises?
Arnaud Héritier
 
Lorraine JUG (1st June, 2010) - Maven
Lorraine JUG (1st June, 2010) - MavenLorraine JUG (1st June, 2010) - Maven
Lorraine JUG (1st June, 2010) - Maven
Arnaud Héritier
 
Riviera JUG (20th April, 2010) - Maven
Riviera JUG (20th April, 2010) - MavenRiviera JUG (20th April, 2010) - Maven
Riviera JUG (20th April, 2010) - Maven
Arnaud Héritier
 
Lausanne Jug (08th April, 2010) - Maven
Lausanne Jug (08th April, 2010) - MavenLausanne Jug (08th April, 2010) - Maven
Lausanne Jug (08th April, 2010) - Maven
Arnaud Héritier
 

Plus de Arnaud Héritier (20)

Devops Recto-Verso @ DevoxxMA
Devops Recto-Verso @ DevoxxMADevops Recto-Verso @ DevoxxMA
Devops Recto-Verso @ DevoxxMA
 
Java is evolving rapidly: Maven helps you staying on track
Java is evolving rapidly:  Maven helps you staying on trackJava is evolving rapidly:  Maven helps you staying on track
Java is evolving rapidly: Maven helps you staying on track
 
Sonar In Action 20110302-vn
Sonar In Action 20110302-vnSonar In Action 20110302-vn
Sonar In Action 20110302-vn
 
2014 August - eXo Software Factory Overview
2014 August - eXo Software Factory Overview2014 August - eXo Software Factory Overview
2014 August - eXo Software Factory Overview
 
CRaSH @ JUGSummerCamp 2012 - Quickie
CRaSH @ JUGSummerCamp 2012 - QuickieCRaSH @ JUGSummerCamp 2012 - Quickie
CRaSH @ JUGSummerCamp 2012 - Quickie
 
LavaJUG-Maven 3.x, will it lives up to its promises
LavaJUG-Maven 3.x, will it lives up to its promisesLavaJUG-Maven 3.x, will it lives up to its promises
LavaJUG-Maven 3.x, will it lives up to its promises
 
Hands on iOS developments with jenkins
Hands on iOS developments with jenkinsHands on iOS developments with jenkins
Hands on iOS developments with jenkins
 
eXo Software Factory Overview
eXo Software Factory OvervieweXo Software Factory Overview
eXo Software Factory Overview
 
Apache Maven - eXo TN presentation
Apache Maven - eXo TN presentationApache Maven - eXo TN presentation
Apache Maven - eXo TN presentation
 
Mobile developments at eXo
Mobile developments at eXoMobile developments at eXo
Mobile developments at eXo
 
Jenkins User Meetup - eXo usages of Jenkins
Jenkins User Meetup - eXo usages of JenkinsJenkins User Meetup - eXo usages of Jenkins
Jenkins User Meetup - eXo usages of Jenkins
 
ToursJUG-Maven 3.x, will it lives up to its promises
ToursJUG-Maven 3.x, will it lives up to its promisesToursJUG-Maven 3.x, will it lives up to its promises
ToursJUG-Maven 3.x, will it lives up to its promises
 
YaJUG-Maven 3.x, will it lives up to its promises
YaJUG-Maven 3.x, will it lives up to its promisesYaJUG-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
BordeauxJUG-Maven 3.x, will it lives up to its promisesBordeauxJUG-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
ToulouseJUG-Maven 3.x, will it lives up to its promisesToulouseJUG-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
Apache Maven - eXo VN office presentationApache Maven - eXo VN office presentation
Apache Maven - eXo VN office presentation
 
LyonJUG - Maven 3.x, will it live up to its promises?
LyonJUG - Maven 3.x, will it live up to its promises?LyonJUG - Maven 3.x, will it live up to its promises?
LyonJUG - Maven 3.x, will it live up to its promises?
 
Lorraine JUG (1st June, 2010) - Maven
Lorraine JUG (1st June, 2010) - MavenLorraine JUG (1st June, 2010) - Maven
Lorraine JUG (1st June, 2010) - Maven
 
Riviera JUG (20th April, 2010) - Maven
Riviera JUG (20th April, 2010) - MavenRiviera JUG (20th April, 2010) - Maven
Riviera JUG (20th April, 2010) - Maven
 
Lausanne Jug (08th April, 2010) - Maven
Lausanne Jug (08th April, 2010) - MavenLausanne Jug (08th April, 2010) - Maven
Lausanne Jug (08th 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