简体   繁体   English

javassist从第三方库/ jar获取CtClass

[英]javassist get CtClass from a third party library/jar

I want to add with javassist a SLF4J logger in my class. 我想在我的课程中添加一个SLF4J记录器的javassist。 So first, I try to get its CtClass such as I can build the field after: 首先,我尝试获取其CtClass,例如我可以在以下情况下构建字段:

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

But I never pass that line and always get a javassist.NotFoundException. 但我从来没有通过那一行,总是得到一个javassist.NotFoundException。

I tried different things: 我尝试了不同的东西:

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

And I even tried to pass org.slf4j.Logger to the URLClassLoader: 我甚至试图将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));

But nothing works. 但没有任何作用。

Note: This is how pool is created just after the call to insertClassPath: 注意:这是在调用insertClassPath之后创建池的方式:

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

I'm completely stuck here. 我完全被困在这里了。 Any help would be much appreciated. 任何帮助将非常感激。

Provide the path upto the jar file name. 提供jar文件名的路径。
Check below code. 检查以下代码。 I coud able to see the Logger class loaded of slf4j 我可以看到加载了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);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM