#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:
Я сделал что-то вроде этого javassist, и, насколько я помню, имя пакета является частью файла класса. Это означает, что ваш код необходимо изменить на:
ClassPool pool = ClassPool.getDefault();
pool.insertClassPath("C:\Users\MainPC\Documents");
CtClass clazz = pool.getCtClass("TestDir/TestClass");