Estrazione delle informazioni sulla classe Java dai file binari compilati da AOT
La compilazione ahead-of-time (AOT) nel mondo Java è stata a lungo oggetto di dibattito, ma fino all'avvento di GraalVM non esisteva alcuno strumento in grado di ottenere una buona compilazione AOT, né tantomeno di gestire l'intero ecosistema. Nonostante GraalVM fornisca uno strumento per immagini native che assiste efficacemente gli sviluppatori nella compilazione AOT, ottenere una compilazione AOT pronta all'uso per le applicazioni Java è ancora molto impegnativo a causa della complessità e della diversità dell'ecosistema Java, in particolare con le tecnologie di reflection e proxy ampiamente utilizzate in vari framework comuni.
Spring Native 项目
Grazie al progetto Spring Native del team di Spring Framework, è possibile ottenere la compilazione AOT dei progetti con un solo clic tramite plugin Maven o Gradle. Tuttavia, al momento questa funzionalità è applicabile solo ai progetti Spring Boot.
Si prega di utilizzare Sping Native per generare programmi Java compilati con AOT
Ecco gli esempi ufficiali di Spring Native per la generazione di applicazioni Java compilate AOT (ambiente di 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
Dopo un tempo di compilazione relativamente lungo e un notevole consumo di memoria, possiamo ottenere un programma Java compilato con AOT nella directory di destinazione. Si tratta di un file binario autonomo che può essere eseguito in modo indipendente senza dipendenze.

petclinic-jpa è un programma compilato da AOT e può essere eseguito direttamente
Estrarre informazioni sulla classe Java dai file binari compilati AOT
In passato, la protezione del codice Java è sempre stata un problema molto complesso e AOT è considerata una soluzione. Purtroppo, molti programmi Java non possono più essere separati dal framework. A causa della complessità del framework, anche i programmi compilati da AOT devono includere informazioni sulle classi nel file binario finale generato. I file delle classi sono in realtà ordinatamente disposti nell'area delle risorse del file binario.
I seguenti strumenti possono scansionare ed estrarre informazioni sulla classe dai file binari compilati da AOT
I seguenti strumenti possono scansionare ed estrarre informazioni sulla classe dai file binari compilati da 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>'
Utilizzando come esempio petclinic-jpa, ottenuto nel passaggio precedente, estraete le informazioni sulla classe e confrontatele con il codice sorgente. Potete vedere che è possibile ottenere informazioni sul modello, sul controller e sul servizio.
