Загрузка внешних файлов .class с помощью Javassist

#javassist

#javassist

Вопрос:

У меня есть каталог с именем ‘TestDir’, который содержит несколько внешних файлов .class, которые я хотел бы загружать и изменять во время выполнения с помощью JAssist.

Я понимаю, что именно так вы должны загружать внешние классы с помощью javassist:

     ClassPool pool = ClassPool.getDefault();
    
    pool.insertClassPath("C:\Users\MainPC\Documents\TestDir");
    CtClass clazz = pool.getCtClass("TestClass");
  

Это работает без каких-либо исключений, однако в данный момент попробуйте вызвать любые методы ‘clazz’, например:

     System.out.println(clazz.getGenericSignature());
  

Я получаю следующее исключение:

 Exception in thread "main" java.lang.RuntimeException: cannot find TestClass: TestDir.TestClass found in TestClass.class
at javassist.CtClassType.getClassFile3(CtClassType.java:211)
at javassist.CtClassType.getClassFile2(CtClassType.java:178)
at javassist.CtClassType.getGenericSignature(CtClassType.java:379)
at ReflectionTests.main(ReflectionTests.java:33)
  

Может кто-нибудь объяснить мне, почему это происходит?

Комментарии:

1. riptutorial.com/java/example/32483/…

Ответ №1:

Я сделал что-то вроде этого javassist, и, насколько я помню, имя пакета является частью файла класса. Это означает, что ваш код необходимо изменить на:

 ClassPool pool = ClassPool.getDefault();
    
pool.insertClassPath("C:\Users\MainPC\Documents");
CtClass clazz = pool.getCtClass("TestDir/TestClass");