2008-10-02 17 views
4

Je joue avec BCEL. Je ne l'utilise pas pour générer du bytecode, mais j'essaie plutôt d'inspecter la structure des classes compilées existantes.Créer un objet BCEL JavaClass à partir d'un fichier .class arbitraire

Je dois être capable de pointer vers un fichier .class arbitraire n'importe où sur mon disque dur et charger un objet JavaClass basé sur cela. Idéalement, je voudrais éviter d'avoir à ajouter la classe donnée à mon classpath.

Répondre

10

La méthode la plus simple consiste à créer un ClassParser avec le nom de fichier et d'appeler parse(). Vous pouvez également utiliser SyntheticRepository et fournir un chemin de classe (ce n'est pas votre chemin de classe, IYSWIM).

2
new ClassParser(classfilebytearrayhere).parse() 
2

La classe .class existante peut être chargée en classe dans un objet de classe java lang. Ensuite, il peut être converti en structure de javaclass intermédiaire BCEL. Le code suivant peut aider: -

Class<?> javaClass1 = null; 
javaClass1 = ucl.loadClass("com.sample.Customer"); 
org.apache.bcel.classfile.JavaClass javaClazz1=org.apache.bcel.Repository.lookupClass(javaClass1);