Загрузка внешних файлов .class с помощью 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)

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


person stav    schedule 11.11.2020    source источник
comment
riptutorial.com/java/example/32483/   -  person dan1st    schedule 11.11.2020


Ответы (1)


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

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