Le blueprint Spring Boot Native pour JHipster génère du code et une configuration pour créer un projet JHipster qui utilise Spring Native, un projet Spring expérimental qui permet de compiler des applications Spring en exécutables natifs avec le compilateur GraalVM Native Image.
Les images natives GraalVM utilisent la compilation anticipée pour transformer le bytecode Java en une image native, qui est un exécutable autonome. L'image native résultante contient les classes de l'application, les classes des dépendances et même les parties nécessaires de Substrate VM. Une image native démarre plus rapidement, est plus petite et utilise moins de mémoire par rapport à une application traditionnelle exécutée sur une JVM. Les inconvénients sont des builds plus lents et moins d'optimisations d'exécution, car toute la configuration se produit pendant le temps de build.
GraalVM propose des binaires pour les différentes versions de l'édition Community et Enterprise. Après avoir installé GraalVM Community, la prise en charge de l'image native peut être ajoutée avec l'outil GraalVM Updater (gu
) :
gu install native-image
Après cette étape, l'exécutable Native Image deviendra disponible dans le répertoire $JAVA_HOME/bin. La commande gu install native-image
mentionnée précédemment installera également la prise en charge des images natives à partir du catalogue GitHub pour les utilisateurs de la communauté GraalVM. Pour les utilisateurs de GraalVM Enterprise, une installation manuelle est requise.
Tester la prise en charge de l'image native est possible en créant une classe Java simple, en compilant la classe avec javac
et en créant une image native basée sur le bytecode compilé :
javac HelloWorld.java
native-image HelloWorld
L'image native résultante contient l'application, toutes les bibliothèques et les parties nécessaires de la JVM et peut être exécutée de manière autonome :
./helloworld
Le blueprint Spring Boot Native pour JHipster génère du code et une configuration, à utiliser comme point de départ avant d'ajouter des fonctionnalités spécifiques au projet. Le projet résultant contient la prise en charge de Spring Native qui à son tour utilise le compilateur GraalVM d'images natives pour créer des exécutables pour les applications Spring.
JHipster nécessite une version récente de Node.js, après quoi, JHipster et le blueprint JHipster Native peuvent être installés :
npm install -g generator-jhipster
npm install -g generator-jhipster-native
Un message s'affiche lorsque la version de Node.js installée est trop ancienne pour JHipster Native. Maintenant, un répertoire de projet peut être créé, mais assurez-vous que le chemin ne contienne pas d'espaces. Dans le répertoire du projet, le projet JHipster Native peut être généré :
jhipster-native
Après avoir configuré le projet et ajouté les fonctionnalités souhaitées au code généré, Maven peut être utilisé pour créer l'exécutable natif :
./mvnw package -Pnative,prod -DskipTests
La création de l'exécutable nécessite un peu plus de temps qu'une construction normale, car toutes les optimisations sont effectuées à l'avance plutôt que pendant l'exécution. Une fois la compilation terminée, l'application peut être exécutée :
./target/native-executable
Initié en 2019 par l'équipe Spring qui a livré la première version bêta en mars 2021, Spring Native est un projet expérimental de prise en charge des images natives pour les applications Spring. Les idées et la mise en œuvre de Spring Native sont promues dans Spring 6.0 comme annoncé lors de SpringOne 2021. La feuille de route de Spring Framework 6.0 montre que la version GA est prévue pour octobre 2022.
Les développeurs peuvent en savoir plus dans cet article de blog par Matt Raible, developer advocate chez Okta, sur l'exécution de JHipster sur GraalVM, y compris des instructions sur la configuration d'un fournisseur d'identité.