Extraction des informations de classe Java à partir de fichiers binaires compilés par AOT
La compilation AOT (Ahead-of-Time) dans l'écosystème Java fait l'objet de débats depuis longtemps. Avant l'arrivée de GraalVM, aucun outil ne permettait une compilation AOT performante, et encore moins de piloter l'ensemble de l'écosystème. Bien que GraalVM propose l'outil native-image pour assister efficacement les développeurs dans la compilation AOT, obtenir une compilation AOT prête à l'emploi pour les applications Java reste un défi de taille en raison de la complexité et de la diversité de l'écosystème Java, notamment avec l'utilisation généralisée des technologies de réflexion et de proxy dans de nombreux frameworks courants.
Printemps natif 项目
Grâce au projet Spring Native de l'équipe Spring Framework, la compilation AOT des projets en un clic est possible via les plugins Maven ou Gradle. Cependant, cette fonctionnalité est actuellement réservée aux projets Spring Boot.
Veuillez utiliser Spring Native pour générer des programmes Java compilés AOT.
Voici les exemples officiels de Spring Native pour la génération d'applications Java compilées AOT (Environnement de test : Ubuntu 20.04, Docker 20.10.6)
git clone https://github.com/spring-projects-experimental/spring-native.git
cd spring-native/sample/petclinic-jpa
./build.sh
Après un temps de compilation relativement long et une consommation importante de mémoire, on obtient un programme Java compilé AOT dans le répertoire cible. Il s'agit d'un fichier binaire autonome qui peut s'exécuter indépendamment, sans aucune dépendance.

petclinic-jpa est un programme compilé par AOT et peut être exécuté directement.
Extraire les informations des classes Java à partir des fichiers binaires compilés AOT
La protection du code Java a toujours constitué un problème complexe, et la compilation AOT est considérée comme une solution. Malheureusement, de nombreux programmes Java sont aujourd'hui indissociables du framework. Du fait de la complexité de ce dernier, même les programmes compilés avec AOT doivent inclure les informations de classe dans le fichier binaire final. Ces fichiers de classe sont organisés de manière ordonnée dans la zone de ressources du fichier binaire.
Les outils suivants permettent d'analyser et d'extraire les informations de classe à partir de fichiers binaires compilés AOT.
Les outils suivants permettent d'analyser et d'extraire les informations de classe à partir de fichiers binaires compilés AOT.
https://github.com/3-keys/binary-classfile-reader
git clone https://github.com/3-keys/binary-classfile-reader
cd binary-classfile-reader
./gradlew run --args='<path-of-the-binary-file> <output-folder>'
En utilisant petclinic-jpa, obtenu à l'étape précédente, comme exemple, extrayez les informations de classe et comparez-les au code source. Vous constaterez que les informations relatives au modèle, au contrôleur et au service sont toutes disponibles.
