java.lang.ClassNotFoundException: com.example.Utils
at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at com.example.Main.main(Main.java:10)
此处显示`Main.java`第10行尝试加载`com.example.Utils`类失败。
// 自定义类加载器加载插件类
File pluginDir = new File("plugins");
URL[] urls = new URL[pluginDir.listFiles().length];
for (int i = 0; i implClass = pluginLoader.loadClass("com.plugin.ServiceImpl");
Service service = (Service) Proxy.newProxyInstance(
pluginLoader,
new Class[]{Service.class},
new InvocationHandler() {...}
);
六、进阶调试技巧
6.1 使用`-verbose:class`参数
启动JVM时添加该参数可输出类加载详情:
java -verbose:class com.example.Main
# 输出示例:
[Loaded com.example.Main from file:/C:/project/target/classes/]
[Loaded java.lang.Object from shared objects file]
6.2 远程调试类加载
public class ClassLoaderTree {
public static void printTree(ClassLoader loader, int level) {
for (int i = 0; i
关键词:ClassNotFoundException、类路径、动态加载、模块系统、依赖管理、类加载器、Java异常处理、构建工具、诊断方法、预防策略