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();        }    }}