Quarkus 2.0
Tags: quarkus, dev, java, programming
Published: 2021-10-25 12:13:28

**QUARKUS 2.0 IS HERE!** : voici le message de la page d’accueil du site de Quarkus.io et qu’est-ce que ça fait plaisir de voir arriver cette nouvelle release !

![Quarkus 2 is here](https://jeanphi-baconnais.gitlab.io/img/quarkus-2-here.png)

## Une version “majeure” ?

Le mot “release” est souvent associé à la notion de version “majeure” contenant un changement important (aussi appelé “breaking change”). Les utilisateurs les redoutent souvent, se demandant si l’effort à adopter et les tests de non-régression seront importants.  

Sauf que pour Quarkus, cette nouveauté ne va pas provoquer une grosse rupture avec la précédente version, du moins pour les utilisateurs. C’est au cœur de Quarkus que les modifications sont conséquentes et sur lesquelles ont contribué environ 200 personnes à cette nouvelle release 👏.

## La migration 

La migration de vos projets vers la version 2.0 de Quarkus paraît simple à effectuer et concerne uniquement quelques modules. La principale évolution “de base”, c’est la prise en compte du JDK 11 par défaut et l’arrêt du support du JDK 8.

Beaucoup de guides ont été développés pour faciliter la compréhension de Quarkus aux utilisateurs. Et bien pour la migration, un document a été rédigé et contient le détail des impacts sur les modules, comme par exemple SmallRye, Avro, gRPC, etc. C’est par [ici]( https://github.com/quarkusio/quarkus/wiki/Migration-Guide-2.0).

## Sous le capot

C’est sous le capot que les modifications apportées dans cette version 2.0 sont visibles, notamment avec la prise en compte des versions 4 de [VertX](https://vertx.io/blog/whats-new-in-vert-x-4/) et [d’Eclipse MicroProfile](https://projects.eclipse.org/projects/technology.microprofile/releases/4.0).

Quarkus est basé sur **Vert.x** et profite de cette mise à jour - Vert.x 3 est sorti il y a 6 ans - contenant beaucoup d’améliorations dans la gestion de l’aspect réactif. **MicroProfile** quant à lui a profité de cette release pour mettre à jour des modules comme par exemple Open API 2.0, Rest Client 2, etc. 

## L’aspect “dev joy”

La version 2.0 améliore l’aspect **“dev joy”** tant mis en avant par Quarkus. Il y avait déjà le dev mode qui permet d’avoir du rechargement à chaud - le hot reload -, c’est-à-dire prendre en compte (sans relancer le composant) les modifications apportées dans les classes java ou bien dans les fichiers de configurations. 

L’arrivée des “dev services” dans la version 1.13 avait apporté une belle plus-value dans la “non gestion” des services comme les bases de données. Quarkus initialise des conteneurs de bases de données, vous évitant d’avoir à  installer et configurer une base de données. Dans la version 2, les dev services supportent plus de composants (MongoDB et Kafka entre autres).

Désormais, le “continuous testing” arrive et va relancer les tests unitaires pour vous à chaque modification. Cette fonctionnalité est déjà connue des personnes travaillant sur du “front”, mais elle manquait terriblement sur l’éco-système Java. La rapidité d’exécution du test est impressionnante. Après avoir enregistré ma modification, les tests impactés sont ré-exécutés en moins d’une seconde et me donnent un retour quasi instantané de l’erreur que j’ai provoquée.

![Continuous testing](https://jeanphi-baconnais.gitlab.io/img/quarkus-2-testsko.png)

Le compte rendu de l’exécution des tests est également disponible dans la console DEV UI.

![Quarkus UI](https://jeanphi-baconnais.gitlab.io/img/quarkus-2-ui.png)

Le continuous testing va démarrer votre application en mode test, dans la même JVM que votre application mais dans un classloader séparé. Vous avez donc dans la même console l’expérience de live reload du dev mode et vos tests, vous permettant de tirer le meilleur parti des deux mondes. 
Plus d’hésitation à avoir, vous pouvez développer vos applications Quarkus en Test Driven Development (TDD) tout en continuant d’utiliser le dev mode de Quarkus.

## La CLI 

Une autre fonctionnalité est arrivée, c’est la CLI (Command Line Interface). Développée à l’aide de la librairie [Picocli](https://picocli.info/) et installée avec [Jbang](https://github.com/jbangdev/jbang), elle permet de retrouver les commandes que l’on connaissait via maven ou gradle, comme la création de projets, la gestion d’extensions, l’exécution du projet en dev mode.

![La CLI](https://jeanphi-baconnais.gitlab.io/img/quarkus-2-cli.png)

Un `quarkus create` initialise un projet identique à celui qu’on pourrait générer avec [code-quarkus](https://code.quarkus.io/), via les commandes maven ou les extensions des IDE.

![Quarkus create](https://jeanphi-baconnais.gitlab.io/img/quarkus-2-create.png)

Toutes les extensions disponibles sont visibles via cette commande `quarkus ext list --concise -i` et il est possible d’effectuer une recherche avec le suffixe `-s`: `quarkus ext list --concise -i -s jdbc`

![Quarkus ext list](https://jeanphi-baconnais.gitlab.io/img/quarkus-2-ext-list.png)


## D’autres évolutions

Dans cette version, on retrouve aussi l’arrivée du support des Coroutines Koltin, un client GraphQL, une mise à jour d’Hibernate ORM en 5.5, le support des transactions dans l’extension MongoDB with panache, la stabilité de l’extension RestEasy reactive ainsi que l’ajout d’une extension pour Amazon SSM.

## Conclusion

Cette nouvelle version majeure de Quarkus apporte un lot de nouveautés améliorant les performances et l’expérience utilisateur. Malgré le fait que cette version soit une “2.0”, l’effort de migration est très léger, il n’y aucune raison d’hésiter à l’installer sur vos projets ! 

Plus d’informations sur [cette page](https://quarkus.io/quarkus2/).

Merci à Loïc Mathieu et à Guillaume Le Floch pour leur relecture et contribution 🙏