Extracción de información de clases Java de archivos binarios compilados por AOT
La compilación anticipada (AOT) en el mundo Java ha sido un tema de debate durante mucho tiempo, pero hasta la aparición de GraalVM, no existía una herramienta que pudiera lograr una buena compilación AOT, y mucho menos impulsar todo el ecosistema. A pesar de que GraalVM proporciona la herramienta native-image para ayudar efectivamente a los desarrolladores con la compilación AOT, lograr una compilación AOT lista para usar en aplicaciones Java sigue siendo muy desafiante debido a la complejidad y diversidad del ecosistema Java, especialmente con las tecnologías de reflexión y proxy ampliamente utilizadas en varios frameworks comunes.
Proyecto Spring Native
Gracias al proyecto Spring Native del equipo de Spring Framework, pueden lograr la compilación AOT de proyectos con un solo clic a través de plugins de Maven o Gradle. Sin embargo, actualmente solo es aplicable a proyectos Spring Boot.
Por favor use Spring Native para generar programas Java compilados por AOT
Aquí están los ejemplos oficiales de Spring Native para generar aplicaciones Java compiladas por AOT (Entorno de prueba: 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
Después de un tiempo de compilación relativamente largo y un gran consumo de memoria, podemos obtener un programa Java compilado por AOT en el directorio target. Este es un archivo binario independiente que puede ejecutarse de forma independiente sin ninguna dependencia.

petclinic-jpa es un programa compilado por AOT y puede ejecutarse directamente
Extraer información de clases Java de archivos binarios compilados por AOT
La protección de código Java siempre ha sido un problema muy difícil en el pasado, y AOT también se considera una solución para la protección de código Java. Desafortunadamente, muchos programas Java ahora no pueden separarse del framework. Debido a la complejidad del framework, incluso los programas compilados por AOT deben incluir información de clases en el archivo binario final generado. Los archivos class están en realidad ordenados cuidadosamente en el área de recursos del archivo binario.
Las siguientes herramientas pueden escanear y extraer información de clases de archivos binarios compilados por AOT
Las siguientes herramientas pueden escanear y extraer información de clases de archivos binarios compilados por 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>'
Usando petclinic-jpa, que se obtuvo en el paso anterior, como ejemplo, extraiga la información de clases de él y compárela con el código fuente. Puede ver que la información del modelo, la información del controlador y la información del servicio pueden obtenerse.
