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