动态加载jar文件

时间:2015-03-12 21:41:55

标签: java eclipse jar

目前我有02个jar文件,a.jar和b.jar,两个jar文件都包含一个类名MyClass,它在同一个包名“application.test”中,它有相同的方法

void run (){ ...}

在a.jar中,run方法实现如下

void run (){
     System.out.print("a.jar");
}

在b.jar中,run方法实现如下

void run (){
     System.out.print("b.jar");
}

在我的主应用程序中,我将通过执行以下操作在其lib文件夹中动态加载存在的jar文件:

public class DynamicLoader{
    public Class<?> classToLoad;
    public Object instance;
    public String classname;

    public DynamicLoader(URL[] JarURL, String classname) {
        URLClassLoader child = new URLClassLoader(JarURL, this.getClass().getClassLoader());
        this.classname = classname;
        classToLoad = Class.forName(classname, true, child);
        instance = classToLoad.newInstance();
    }
}

基本上,最后我将有两个名为jar1和jar2的DynamicLoader对象。然后我将通过

对jar1和jar2对象执行方法run()
Method method = classToLoad.getDeclaredMethod("run");
method.invoke(instance);

我遇到的问题是,当我使用EclipseIDE运行我的MainApplication时,在lib文件夹中使用a.jar和b.jar,结果是正确的。在控制台中,打印出“a.jar”和“b.jar”行。但是当我将MainApplication导出到一个可运行的jar并使用命令行运行时,在控制台中会打印两行“a.jar”和“a.jar”,尽管它在eclipse期间运行时工作正常。
有人可以告诉我,我做错了什么吗?
谢谢。

0 个答案:

没有答案