Extraction des informations de classes Java à partir de fichiers binaires compilés par AOT
La compilation anticipée (AOT) dans le monde Java est un sujet débattu depuis longtemps, mais jusqu'à l'émergence de GraalVM, il n'existait aucun outil capable de réaliser une bonne compilation AOT, encore moins de piloter l'ensemble de l'écosystème. Malgré le fait que GraalVM fournisse l'outil native-image pour aider efficacement les développeurs dans la compilation AOT, réaliser une compilation AOT prête à l'emploi pour les applications Java reste très difficile en raison de la complexité et de la diversité de l'écosystème Java, en particulier avec les technologies de réflexion et de proxy largement utilisées dans divers frameworks courants.
Projet Spring Native
Grâce au projet Spring Native de l'équipe du Spring Framework, ils sont capables de réaliser une compilation AOT en un clic des projets via les plugins Maven ou Gradle. Cependant, actuellement cela n'est applicable qu'aux projets Spring Boot.
Veuillez utiliser Spring Native pour générer des programmes Java compilés par AOT
Voici les exemples officiels de Spring Native pour générer des applications Java compilées par 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, nous pouvons obtenir un programme Java compilé par AOT dans le répertoire target. Il s'agit d'un fichier binaire autonome qui peut fonctionner indépendamment sans aucune dépendance.

petclinic-jpa est un programme compilé par AOT et peut s'exécuter directement
Extraire les informations de classes Java des fichiers binaires compilés par AOT
La protection du code Java a toujours été un problème très difficile par le passé, et la compilation AOT est également considérée comme une solution pour la protection du code Java. Malheureusement, de nombreux programmes Java actuels ne peuvent pas se séparer du framework. En raison de la complexité du framework, même les programmes compilés par AOT doivent inclure les informations de classe dans le fichier binaire final généré. Les fichiers Class sont en fait soigneusement rangés dans la zone de ressources du fichier binaire.
Les outils suivants peuvent scanner et extraire les informations de classe à partir de fichiers binaires compilés par 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, on extrait les informations de classe et on les compare avec le code source. On peut constater que les informations du modèle, du contrôleur et du service peuvent toutes être obtenues.
