Quand Java prend de la vitesse, Apache Maven vous garde sur les rails. Hervé Boutemy - @hboutemy Arnaud Héritier - @aheritier



Documents pareils
Initiation à JAVA et à la programmation objet.

Annexe : La Programmation Informatique

Plan du cours. Historique du langage Nouveautés de Java 7

Java c est quoi? Java. Java. Java : Principe de fonctionnement 31/01/ Vue générale 2 - Mon premier programme 3 - Types de Programme Java

Votre premier projet Android

TD/TP 1 Introduction au SDK d Android

JOnAS Day 5.1. Outils de développements

Installation et prise en main

Environnements de développement (intégrés)

Environnement de Développement Outils Open-Source d'integration Continue. Exemple de Mise en Oeuvre

Introduction à Java. Philippe Genoud.

Java Licence Professionnelle CISII,

Hudson Serveur d Intégration Continue. Adrien Lecharpentier IR3 Ingénieurs2000, Université de Marne la Vallée

Cours 1: Java et les objets

SonarQube : une autre vision de votre logiciel

Vulgarisation Java EE Java EE, c est quoi?

Bases Java - Eclipse / Netbeans

Java c est quoi? Java pourquoi?

Eclipse atelier Java

Chapitre I Notions de base et outils de travail

Fiche technique rue de Londres Paris Tél. : Mail : contact@omnikles.com

Cours Plugin Eclipse. Université Paris VI / Parcours STL / Master I Pierre-Arnaud Marcelot - Iktek - pamarcelot@iktek.com

Configuration requise pour l utilisation de la plateforme EnlightKS Online Certification Management Services ET2.13 Juin 2011

DOSSIER DEVELOPPEUR Projet CAR

Programmeur Java 1.4 et 5.0

Installation et compilation de gnurbs sous Windows

INF2015 Développement de logiciels dans un environnement Agile Examen final hiver 2015

Europa. Développement JEE 5. avec Eclipse. K a r i m D j a a f a r. A v e c l a c o n t r i b u t i o n d e O l i v i e r S a l v a t o r i

TUTORIEL: INSTALLATION D'UN SERVEUR LOCAL SOUS WINDOWS 7 POUR APPINVENTOR version du 06/04/2013

Remise à niveau d un programme JAVA du domaine public

Introduction à Eclipse

Évaluation et implémentation des langages

Déployer et sécuriser des applica1ons mobiles dans votre SI / Cloud

Traitement de données

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

APIs de table pour SQL Server

TP1 : Initiation à Java et Eclipse

Programmation Orientée Objet

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Projet de développement. Introduction à Eclipse. Application à votre projet. Philippe Collet. Organisation. Cours 1 : principes généraux - svn

Java Avancé. Le langage Java. Rémi Forax

Ma stack d ou,ls agiles, tout un programme! OU COMMENT BÉNÉFICIER DES TECHNOLOGIES GRAND PUBLIC POUR AMÉLIORER ET OPTIMISER MES OUTILS LOGICIELS.

TP au menu «UI ANDROID»

Speed up your business

Java - la plateforme

Le Cloud: Mythe ou Réalité?

Android. Présentation d Android. Florent Garin

Journée IJD. Moussa Tari Bako Bachir. 25 juin 2012 ARLES/INRIA. Introduction Travail Chez ARLES

Programmation Objet Java Correction

Anne Tasso. Java. Le livre de. premier langage. 10 e édition. Avec 109 exercices corrigés. Groupe Eyrolles, , ISBN :

Java au cœur de la base de données Oracle

INITIATION AU LANGAGE JAVA

La famille Symphony. Click to add text. Vincent Perrin IBM Collaboration Solutions Architect IBM Corporation

Configuration matérielle et logicielle requise et prérequis de formation pour le SYGADE 6

Annexe Android Studio

TP1. Outils Java Eléments de correction

INF2015 Développement de logiciels dans un environnement Agile. Examen intra 20 février :30 à 20:30

Table des matières. Partie I Concepts de base Préface... VII

Celui qui vous parle. Yann Vigara

Introduction aux. services web 2 / 2

Outils de développement Java sous Linux

Projet de développement

Apprendre Java et C++ avec NetBeans

Correspondances Windows-Linux

4. SERVICES WEB REST 46

- TP Programmation Android - NFA024 Conservatoire National des Arts et Métiers

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

Code Produit Nom Produit Dernière mise à jour. AM003 Alias Mobile On Demand Licence 1 mois 27/04/2015

Améliorez et industrialisez vos feedback produit

Conférence SIG 2011 Versailles 5-6 Octobre 2011 Atelier Technique ArcGIS for Server en 10.1

Les réseaux sociaux et le mobile au service de l industrie du tourisme digital

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Institut Supérieure Aux Etudes Technologiques De Nabeul. Département Informatique

Principes. 2A-SI 3 Prog. réseau et systèmes distribués 3. 3 Programmation en CORBA. Programmation en Corba. Stéphane Vialle

BOUCHARD Nicolas. GENTILE Pierre

L Intégration Continue & Agilité

<Insert Picture Here> Maintenir le cap avec Oracle WebLogic Server

Stage : Développement du contenu Web

Apache Tomcat 6. Guide d'administration du serveur Java EE sous Windows et Linux. Résumé. Étienne LANGLET

WebSpy Analyzer Giga 2.1 Guide de démarrage

Experts en technologies Open Source et méthodes Agiles

Point sur les solutions de développement d apps pour les périphériques mobiles

RN2-Programmation Orientée Objet - JAVA CH 1 Introduction à la POO et Java

Généralités sur le Langage Java et éléments syntaxiques.

CloudBees AnyCloud : Valeur, Architecture et Technologie cloud pour l entreprise

Avant-propos 1. Avant-propos Organisation du guide À qui s'adresse ce guide?...4

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

Utiliser Java sans BlueJ

Squale Le portail qualimétrie open-source

Cours 1 : Qu est-ce que la programmation?

NatStar V8.00. Ce document présente la liste des nouvelles fonctionnalités de la 8.00, disponible à partir de septembre 2013.

Export et Import de modèles ICAR sous Trnsys 17

Java pour le Web. Cours Java - F. Michel

SGDN. Projet: JAVASEC

Construction et déploiement d applications Java avec Maven, Archiva, Groovy et Jenkins

1-Introduction 2. 2-Installation de JBPM 3. 2-JBPM en action.7

Développer des Applications Internet Riches (RIA) avec les API d ArcGIS Server. Sébastien Boutard Thomas David

Transcription:

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

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

Qui sommes nous?

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,

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

De quoi parle-t on?

Apache Maven et vous Qui utilise Maven? Quelle version utilisez-vous majoritairement? 3.3? 3.2? 3.1? 3.0? < 3.0?

7 8 On va vous apprendre à jongler 6 Java a 20 ans Version JDK Alpha and Beta JDK 1.0 JDK 1.1 J2SE 1.2 (playground) J2SE 1.3 (kestrel) J2SE 1.4 (merlin) J2SE 5.0 (:ger) Java SE 6 (mustang) Java SE 7 (dolphin) Java SE 8 Java SE 9 Première publica2on 1995 January, 1996 February, 1997 December, 1998 May, 2000 February, 2002 September, 2004 December, 2006 July, 2011 March, 2014 Early 2016 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 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?

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?

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

Roadmap Java & Apache Maven en 2009

Roadmap Java en 2009 un rien plus tard

Roadmap Java & Apache Maven début 2014

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

Version du bytecode

Version du bytecode Java 8 Java 7 = 52 (0x34) = 51 (0x33) Format fichier.class 4 octets : magic number 2 octets : version mineure 2 octets : version majeure 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) Compatibilité binaire ascendante JVM exécute du bytecode plus ancien mais pas du bytecode plus récent, sinon java.lang.unsupportedclassversionerror

Demo

Javac & version du bytecode Javac par défaut, version bytecode = version du JDK utilisé -target : fixe version du bytecode

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

Maven & version du bytecode Maven permet de contrôler facilement la version de bytecode des dépendances du projet règle enforcebytecodeversion du maven-enforcerplugin

Animal Sniffer

Demo

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

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.

Toolchains & JDK

7 8 Maven Toolchains : l arme ul:me 6 Permet d utiliser un JDK pour compiler indépendant du JRE avec lequel Maven et ses plugins s exécutent JDK exécution build (javac ) JRE exécution application JRE exécution Maven & plugins 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 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)

Demo

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

Maven Toolchains & JDK Générique : permet de gérer n importe quel type de toolchain Toolchain <type>jdk</type> intégré dans Maven Plugins «jdk-toolchain aware» : m-compiler-p, m-javadoc-p, m-surefire-p, m-webstart-p, m-jarsigner-p, execmaven-plugin, keytool-maven-plugin, Des toolchains custom existent déjà : protobuf, netbeans,

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)

Résumé

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

Demo - Bonus Quand les optimisations du compilateur JDK 8 créent une incompatibilité binaire maven-jdeps-plugin

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

Q & R

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