javassist从第三方库/ jar获取CtClass

时间:2014-03-24 04:27:05

标签: java javassist

我想在我的课程中添加一个SLF4J记录器的javassist。首先,我尝试获取其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));

但没有任何作用。

注意:这是在调用insertClassPath之后创建 pool 的方式:

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

我完全被困在这里。 任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:4)

提供jar文件名的路径。
检查以下代码。我可以看到加载了slf4j的Logger类

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);