javassist получить CtClass из сторонней библиотеки/jar

Я хочу добавить с помощью javassist регистратор SLF4J в свой класс. Итак, сначала я пытаюсь получить его CtClass, например, я могу построить поле после:

CtClass loggerClass = pool.get(org.slf4j.Logger.class.getName());

Но я никогда не пропускаю эту строку и всегда получаю javassist.NotFoundException.

Я пробовал разные вещи:

pool.importPackage("org.slf4j.Logger");
// or
pool.importPackage("org.slf4j");

И я даже пытался передать org.slf4j.Logger в URLClassLoader:

// add org.slf4j.Logger to the list of urls...
// then:
URLClassLoader loader = new URLClassLoader(urls);
ClassPool.getDefault().insertClassPath(new LoaderClassPath(loader));

Но ничего не работает.

Примечание. Вот как создается pool сразу после вызова insertClassPath:

final ClassPool pool = new ClassPool(ClassPool.getDefault());
pool.childFirstLookup = true;

Я полностью застрял здесь. Любая помощь приветствуется.


person fabien    schedule 24.03.2014    source источник


Ответы (1)


Укажите путь до имени файла jar.
Проверьте код ниже. Я смог увидеть класс Logger, загруженный из slf4j

ClassPool pool = new ClassPool(ClassPool.getDefault());
pool.appendClassPath("./otherlib/slf4j-api-1.7.6.jar");
CtClass ctClass = pool.get("org.slf4j.Logger");
System.out.println(ctClass);
person Naveen Ramawat    schedule 24.03.2014
comment
Смешной. Я нашел решение через несколько минут после того, как вы ответили [stackoverflow.com/questions/16745206/ Это действительно так. Спасибо. :) - person fabien; 24.03.2014
comment
На самом деле я нашел ответ за час до этого, но это было время обеда: P - person Naveen Ramawat; 24.03.2014