
URL[] urls = new URL[6]; urls[0] = '/activation-1.1.1.jar' urls[1] = '/animal-sniffer-annotations-1.14.jar' urls[2] = '/annotations-16.0.2.jar' urls[3] = '/antlr-runtime-3.4.jar' urls[4] = '/asm-4.2.jar' urls[5] = '/cglib-3.1.jar' URLClassLoader urlCLassLoader = new URLClassLoader(urls); try { // 将全部存储到 urlclassload 里面 for (String fullClassName : allFullClassNames) { if (!"module-info".equals(fullClassName)) { Class<?> clazz = urlCLassLoader.loadClass(fullClassName); System.out.println(fullClassName); } } } catch (Exception e) { e.printStackTrace(); } https://paste.ubuntu.org.cn/4545513
net.sf.cglib.transform.AbstractClassTransformer 反编译代码// // Source code recreated from a .class file by IntelliJ IDEA // (powered by FernFlower decompiler) // package net.sf.cglib.transform; import org.objectweb.asm.ClassVisitor; public abstract class AbstractClassTransformer extends ClassTransformer { protected AbstractClassTransformer() { super(262144); } public void setTarget(ClassVisitor target) { this.cv = target; } } https://www.123pan.com/s/dCH9-LYAAA 提取码:v2ex
在Class<?> clazz = urlCLassLoader.loadClass("net.sf.cglib.transform.AbstractClassTransformer"); 小弟进入断点后看到这行执行会报错 java.lang.NoClassDefFoundError: org/apache/tools/ant/Task
这个 NoClassDefFoundError 报错的问题,我在<深入理解 Java 虚拟机:JVM 高级特性与最佳实践(第 3 版)周志明>中找到了原因 大概是 类加载过程解析步骤 出现了 符号引用转为直接引用找不到的问题
但是还是有以下疑问
1 Jooooooooo Feb 25, 2022 NoClassDefFoundErro 绝大多数都是两个不同的 jar 里有相同的路径, 然后加载类的时候找错了. 排除一下就行. |
2 linuxsteam OP 关于第一个问题 我又查了下资料 https://mvnrepository.com/artifact/cglib/cglib/3.3.0 上述连接中是描述 cglib 依赖于 org.apache.ant ant 的 但是该 jar 包 META-INF/中是没有 maven 这个文件夹的。自然我就发现他下面依赖的 org.apache.ant ant 。。。 看来我又得研究研究 jar 包的元数据信息了 |
3 linuxsteam OP @linuxsteam 但是 org.apache.ant ant 是可选的。。。我又迷糊了。。。 |