如何在Java运行的时候动态加载一个jar包到classpath里面

2025-05-02 06:02:38
推荐回答(2个)
回答1:

给你个例子自己看一下吧不会了再追问,注释基本都有了
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125    import java.io.File;import java.lang.reflect.Method;import java.net.URL;import java.net.URLClassLoader;import java.util.List; public final class ExtClasspathLoader {         private static Method addURL = initAddMethod();     private static URLClassLoader classloader = (URLClassLoader) ClassLoader.getSystemClassLoader();     /**      * 初始化addUrl 方法.     * @return 可访问addUrl方法的Method对象     */    private static Method initAddMethod() {        try {            Method add = URLClassLoader.class.getDeclaredMethod("addURL", new Class[] { URL.class });            add.setAccessible(true);            return add;        }        catch (Exception e) {            throw new RuntimeException(e);        }    }      /**      * 加载jar classpath。     */    public static void loadClasspath() {        List files = getJarFiles();        for (String f : files) {            loadClasspath(f);        }         List resFiles = getResFiles();         for (String r : resFiles) {            loadResourceDir(r);        }    }     private static void loadClasspath(String filepath) {        File file = new File(filepath);        loopFiles(file);    }     private static void loadResourceDir(String filepath) {        File file = new File(filepath);        loopDirs(file);    }     /** *//**         * 循环遍历目录,找出所有的资源路径。     * @param file 当前遍历文件     */    private static void loopDirs(File file) {        // 资源文件只加载路径        if (file.isDirectory()) {            addURL(file);            File[] tmps = file.listFiles();            for (File tmp : tmps) {                loopDirs(tmp);            }        }    }     /**      * 循环遍历目录,找出所有的jar包。     * @param file 当前遍历文件     */    private static void loopFiles(File file) {        if (file.isDirectory()) {            File[] tmps = file.listFiles();            for (File tmp : tmps) {                loopFiles(tmp);            }        }        else {            if (file.getAbsolutePath().endsWith(".jar") || file.getAbsolutePath().endsWith(".zip")) {                addURL(file);            }        }    }         /**     * 通过filepath加载文件到classpath。     * @param filePath 文件路径     * @return URL     * @throws Exception 异常     */    private static void addURL(File file) {        try {            addURL.invoke(classloader, new Object[] { file.toURI().toURL() });        }        catch (Exception e) {        }    }       /***     * 从配置文件中得到配置的需要加载到classpath里的路径集合。     * @return     */    private static List getJarFiles() {        // TODO 从properties文件中读取配置信息  如果不想配置 可以自己new 一个List 然后把 jar的路径加进去 然后返回        return null;    }     /**     * 从配置文件中得到配置的需要加载classpath里的资源路径集合     * @return     */    private static List getResFiles() {        //TODO 从properties文件中读取配置信息略  如果不想配置 可以自己new 一个List 然后把 jar的路径加进去 然后返回  额 如果没有资源路径为空就可以了        return null;    }     public static void main(String[] args) {        ExtClasspathLoader.loadClasspath();    }}

回答2:

在项目目录下创建文件夹,一般命名为lib,把你的jar包复制进入,再选择所有的jar包,右键菜单有一个Build Path,下拉菜单只有一个选择,点击就加入了