La lecture du fichier Java
-
24-10-2019 - |
Question
Je veux écrire un outil qui génère un code à l'aide d'un fichier compilé .class
en entrée. Plus précisément, je veux lire à partir de ce fichier de classe:
- Méthodes, avec annotations
- Paramètres Méthode, avec annotations
Le fichier de classe d'entrée se référera probablement à plusieurs types qui ne sont pas dans le classpath de l'outil. Ceci est ok, je ne pas besoin de faire quoi que ce soit avec eux, il suffit de lire les noms de type qualifié sous forme de chaînes. Je besoin d'obtenir des informations des annotations, mais ils seront dans le classpath de l'outil.
Y at-il une bibliothèque que je peux utiliser à cette fin? Ce serait bien si l'API était un peu comme l'API de réflexion, mais il ne doit pas être.
La solution
http://asm.ow2.org/ vous permet de lire une classe à partir d'un fichier / flux d'entrée sans charge de classe il. Il vous permet de voir les annotations qui ne sont pas chargés lors de l'exécution. Il peut également être utilisé pour modifier le code d'octet de classe / annotations / méthode etc.
Autres conseils
L'outil javap inclus le fait probablement déjà JDK ce que vous êtes après.
Vous devez regarder deux choses Reflection API
et Decompiler
Je pense que vous pouvez utiliser l'analyse de classe de printemps.
ClassPathScanningCandidateComponentProvider provider = new ClassPathScanningCandidateComponentProvider(true);
String basePackage = "org/springframework/samples/petclinic";
Set<BeanDefinition> components = provider.findCandidateComponents(basePackage);
for (BeanDefinition component : components) {
System.out.printf("Component: %s\n", component.getBeanClassName());
}
Pour plus d'informations, vous pouvez regarder le printemps docs
Si vous avez accès à générer le fichier .class alors le API de réflexion devrait être en mesure d'aide.