package com.lms.db.driver;import java.io.File;import java.lang.reflect.Method;import java.net.MalformedURLException;import java.net.URL;import java.net.URLClassLoader;import java.util.ArrayList;import java.util.List;/** * @description: 使用URLClassLoader加载 * @author: pp_lan * @date: 2022/3/17 */public class UrlExternalClasspathLoader { private final URLClassLoader urlClassLoader; /** * 构造方法 * @param file jar所在的路径,或者单个jar的全路径 */ public UrlExternalClasspathLoader(File file,ClassLoader parent) throws Exception { List<URL> urlList = new ArrayList<>(); if (file.isDirectory()) { addUrl(urlList, file); } else { addJar(urlList, file); } URL[] urls = urlList.toArray(new URL[]{}); urlClassLoader = new URLClassLoader(urls,parent); } public UrlExternalClasspathLoader(File file) throws Exception { List<URL> urlList = new ArrayList<>(); if (file.isDirectory()) { addUrl(urlList, file); } else { addJar(urlList, file); } URL[] urls = urlList.toArray(new URL[]{}); urlClassLoader = new URLClassLoader(urls); } public void init() { } /** * 加载class * @param name * @return * @throws ClassNotFoundException */ public Class<?> loadClass(String name) throws ClassNotFoundException { return this.urlClassLoader.loadClass(name); } /** * 加载路径 * @param urlList * @param file */ private void addUrl(List<URL> urlList, File file) throws Exception { File[] subFiles = file.listFiles(); if (subFiles != null) { for (File subFile : subFiles) { if (subFile.isDirectory()) { addUrl(urlList, subFile); } else { addJar(urlList, subFile); } } } } /** * 加载jar * @param urlList * @param subFile */ private void addJar(List<URL> urlList, File subFile) throws Exception { try { if (subFile.getAbsolutePath().endsWith(".jar")) { urlList.add(subFile.toURI().toURL()); } } catch (MalformedURLException e) { throw new Exception("加载JAR异常"); } } public static void main(String[] args) throws Exception { System.out.println("开始"); UrlExternalClasspathLoader classLoader1 = new UrlExternalClasspathLoader(new File("D:\\idea_workspace\\1-tool\\db-driver-manager\\src\\main\\resources\\driver\\dm\\Dm7JdbcDriver.jar"),null); UrlExternalClasspathLoader classLoader2 = new UrlExternalClasspathLoader(new File("D:\\idea_workspace\\1-tool\\db-driver-manager\\src\\main\\resources\\driver\\dm\\DmJdbcDriver.jar"),null); try { Class<?> aClass1 = classLoader1.loadClass("dm.jdbc.driver.DmDriver"); Object o = aClass1.newInstance(); System.out.println(o); Class<?> aClass2 = classLoader2.loadClass("dm.jdbc.driver.DmDriver"); Object o2 = aClass2.newInstance(); System.out.println(o2); } catch (Exception e) { e.printStackTrace(); } }}