Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

Inquiring Javaist


Nothing is better than looking under the hood to understand how things are working.

CR du ParisJUG 2016/11/15 - Des builds incroyablement rapide avec Gradle & Quoi de neuf JEE ?

Des builds incroyablement rapide avec Gradle 3

Par Cédric CHAMPEAU (@CedricChampeau) - Gradle

Commençons par quelques news :

  • Gradle 3 est disponible (version 3.2 sortie le 2016/11/14)

  • Gradle 4 est prévu pour début 2017

Gradle (3.x) se définit maintenant par :

Les forces de Gradle 3

Gradle Daemon

  • Beaucoup plus stable depuis la version 3 (plus de lock sur le rep build ! On va enfin pouvoir le supprimer sans avoir besoin de redémarrer…​)

  • Après quelques run (merci le JIT), on gagne plus de 50% de temps de build.

Outils de profiling

Builds incrémentaux

Gradle permet de redéfinir les entrées / sorties de toutes les tâches (@InputFile et @OutputFile), ce qui lui permet de gérer des builds incrémentaux :

  • Si la tâche n’a pas encore donné d’output, c’est donc qu’il faut la lancer.

  • Si, par contre, un output existe, et que les entrées sont les mêmes, cette tâche n’a pas besoin d'être relancée.

Compilation incrémentale

Ce type de compilation est disponible (un peu comme sous Eclipse).
Gradle connaissant toutes les dépendances entre classes, il peut donc l’utiliser, contrairement à javac.
Et, même si encore expérimentale, elle est stable et permet des gains de performance non négligeables.

Elle s’active via la configuration de la task JavaCompile:

apply plugin: 'java'
compileJava {
    //enable incremental compilation
    options.incremental = true
}

Continuous build

Ce type de build écoute en continue les changements dans les inputs des tasks.

Activable avec l’option -t. Exemple :

Gradle -t Asciidoctor

Dans l’exemple précédent, utilisé par Cédric pour builder les slides de sa présentation, le code Asciidoctor de la présentation est, à chaque modification, rebuilder pour générer la nouvelle version des slides.

Composite build : la killer feature de Gradle

Pour Cédric, il s’agit de LA killer feature de Gradle 3.x.

Quelques rappels :

  • mono-repo : 1 repo Git, et plein de sous-projets dedans

    • Avantage : on dispose de tout le code au même endroit, ce qui est pratique pour le débuggage

    • Inconvénient : il n’est pas toujours possible de charger tout le mono-repo dans son IDE…​

  • multi-repo : 1 projet PAR module
    Nous n’avons donc que des dépendances binaires avec nos modules.
    Problème : Lorsqu’il y a un changement dans un module, il faut faire un checkout du projet associé, recompiler, rebuilder, republier,etc. Bref, pas ce qu’il y a de plus pratique.

Les composite builds vont permettrent de réunir ces 2 mondes, en nous gardant que les avantages.

Implications :

  • permet de substituer une dépendance binaire par une dépendance source.
    Un énorme avantage pour débugger une dépendance problématique.
    C’est également valable aussi pour les dépendances transitives.
    Et, grâce à l’utilisation du graphe de dépendances de Gradle, il s’agit bien d’une substitution de dépendances, et non d’un simple remplacement.
    Si le graphe de dépendances de la dépendance source est différent de celui de la dépendance binaire, c’est bien ce nouveau graphe qui est pris en compte.

  • permet de splitter un build multi-projets en plusieurs morceaux (exploser un monolith en multi-modules)
    On peut ne travailler avec le source que des projets qui nous intéressent, et garder le binaire pour les autres.

Les builds multi-modules se déclare soit via le fichier settings.gradle, soit en utilisant le flag --includeBuild.

Task output cache (pour Gradle 4)

Même après un clean, j’ai pas envie de faire le boulot 2 fois…​

Pour partager le résultat d’un build sur le réseau.
Ainsi, le voisin ne perdra pas 25 min de build à récupérer tous les modules dont vous vous êtes déjà chargés ; il n’aura plus qu'à les récupérer du cache.

Sympa d’un point de vue GreenIT car moins de compilation / build.

Ma conclusion

On sent bien au travers de la présentation de Cédric que Gradle continue de s’améliorer, et a peut-être même franchi un cap.
L’arrivée des services en ligne (build scans), et l'accent général mis sur la performance (jetez vraiment oeil au performance guide) montre bien cette volonté de Gradle de faire passer nos builds eux-mêmes dans l’aire de l’industrialisation, et de les rendre "rock-solid".

Pour finir, un schéma comparant les temps d’exécution d’un gradle clean test vs un mvn clean test :

ParisJUG Gradle gradle vs maven clean build.png

Ressources

JEE quoi de neuf ?

Par Charles SABOURDIN et José PAUMARD

Charles et José nous proposent un retour sur les annonces de JavaOne et Devoxx BE concernant JEE, étant donné que la technologie avait souvent été décriée ces derniers temps ("JEE c’est mort…​").

Ils nous explique que, malgré tout ce qui est dit :

  • la communauté JEE est et reste (très) grande

  • nombreuses sont les JSRs JEE8 qui avancent bien

  • de nombreux livres et ressources existent sur le sujet, régulièrement remis à jour

De plus, sur 450 présentations à JavaOne, plus de 50 portaient sur JEE. Pas mal pour une technologie "morte"…​

Pour rappel, voici le contenu de JEE 7 :

ParisJUG Gradle rappels JEE7.jpg

Et voici où nous en sommes pour JEE 8 :

ParisJUG_Gradle_etat-des-lieux-JEE8.jpg ParisJUG_Gradle_JEE8-objectifs.jpg

On note que :

  • JCache n’avance pas des masses (toute une histoire)

  • JSONB, le binding pour JSON, est très fortement demandé

Charles et José nous mettent également un petit peu en garde contre le mouvement "JEE Guardians", avant tout poussé par son fondateur, un ancien évangéliste JEE (récemment viré par Oracle comme la plupart de leurs évangélistes…​), qui n’est pas forcément objectif à 100%.

Concernant la roadmap à venir, les sorties de JEE 8 et 9 vont être très proches (quelques mois d'écard) :

ParisJUG Gradle JEE8 JEE9 roadmap.jpg

On note que l’on commence à avoir un grand écart entre les JEE et les JSE (grosse désynchronisation).

Un rappel général sur la philosophie de JEE : regrouper ce qui marche bien, pour proposer un standard, dans cet ordre (exemple avec Hibernate et CDI).
C’est pour ainsi dire un organe "en retrait" plutôt qu'à la pointe du progrès.

Ressources


About the author

Thomas SCHWENDER

Paris, France


Discussions