2013-11-28 16:02:19

Java URLClassLoader动态加载jar包

Jdk1.2开始有一个URLClassLoader类加载器。该类加载器用于从指向 JAR 文件和目录的 URL 的搜索路径加载类和资源。这里假定任何以 ‘/’ 结束的 URL 都是指向目录的。如果不是以该字符结束,则认为该 URL 指向一个将根据需要打开的 JAR 文件



package com.javaweb.user.test;
import java.io.File;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;
public class UrlTest {
    public static void main(String[] args) {
        try {
            URL url = new File("c:/Url.jar").toURI().toURL();
            URLClassLoader ucl = new URLClassLoader(new URL[]{url});
            Class<?> c = Class.forName("org.javaweb.url.Url",true,ucl);
            Method[] m = c.getDeclaredMethods();
            for(Method method:m ){
                method.setAccessible(true);
                if("test".equals(method.getName())){
                    method.invoke(ucl, new Object[]{});
                }
                System.out.println(method.getName());
            }
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }
    }
}

Url.jar内容:

package org.javaweb.url;
public class Url {
    public static void test(){
        System.out.println("I'm void.");
    }
}

 

输出内容:

I'm void.
test

发表回复