从指定位置的jar中加载class,和卸载class
URL url = new File("/文件路径/entityMaker.jar").toURI().toURL(); ClassLoader systemClassLoader = ClassLoader.getSystemClassLoader(); URLClassLoader classLoader = new URLClassLoader( new URL[]{url}, systemClassLoader ); //加载class //不能使用Class.forName("com.hebaibai.entitymaker.util.SqlUtils")加载Class Class sqlUtils = classLoader.loadClass("com.hebaibai.entitymaker.util.SqlUtils"); final Object instance = sqlUtils.newInstance(); System.out.println(instance.getClass()); //卸载类 Method close = URLClassLoader.class.getDeclaredMethod("close"); close.invoke(classLoader); //已经加载过得没法卸载 sqlUtils = classLoader.loadClass("com.hebaibai.entitymaker.util.FileUtils"); instance = sqlUtils.newInstance(); System.out.println(instance.getClass());
URL url = new File("/home/hjx/Desktop/entityMaker/entityMaker.jar").toURI().toURL(); URLClassLoader classLoader = (URLClassLoader)ClassLoader.getSystemClassLoader(); Method addURL = URLClassLoader.class.getDeclaredMethod("addURL", URL.class); if (!addURL.isAccessible()) { addURL.setAccessible(true); } addURL.invoke(classLoader, url); addURL.setAccessible(addURL.isAccessible()); //可以使用Class.forName("com.hebaibai.entitymaker.util.SqlUtils")加载Class Class<?> aClass = Class.forName("com.hebaibai.entitymaker.util.SqlUtils"); Object instance = aClass.newInstance(); System.out.println(instance.getClass());
本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。
我来说两句