首页 > 代码库 > 动态加载jar包

动态加载jar包

一、编写被调用的类

package com.qunar.helloworld;public class HelloWorld {    public String sayHello(){        return ("helloworld");    }}

使用eclipse的export功能导出jar包,放在/Users/liqiu/Documents/workspace/HelloWorld.jar

二、编写调用jar包的类

package com.qunar.studyspring.javajar;import java.net.URL;import java.net.URLClassLoader;import java.lang.reflect.Method;public class JavaJar {    public String doJar() {        try {            URL url = new URL("file:/Users/liqiu/Documents/workspace/HelloWorld.jar"); // 这里需要重点看URLClassLoader用法,            URLClassLoader loader = new URLClassLoader(new URL[] { url }); // URL跟我们日常见到的格式用法不太一样            Class c = loader.loadClass("com.qunar.helloworld.HelloWorld"); // 在上面找到并加载jar包后,可以通过此            Object myObject = c.newInstance(); // 函数加载某个类,并使用 newInstance            // 生成一个新的对象            Method m = c.getDeclaredMethod("sayHello"); // getDeclaredMethod()方法可以获得            // 指定名字的方法            m.setAccessible(true); // setAccessible方法使上面得到的方法可用                        System.out.println(m.invoke(myObject)); // 由于sayHello方法返回一个String            // 使用m.invoke去调用方法m 也就是sayHello        } catch (Exception ex) {            System.out.println(ex);                    }        return "ddddd";    }}

三、编写测试方法

package com.qunar.studyspring;import org.junit.Test;import com.qunar.studyspring.javajar.JavaJar;public class JarTest {    @Test    public void sayHello(){        JavaJar javajar = new JavaJar();        String ss = javajar.doJar();        System.out.println(ss);    }}

四、测试结果

helloworldddddd

 

动态加载jar包