Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 动态加载jar文件_Java_Eclipse_Jar - Fatal编程技术网

Java 动态加载jar文件

Java 动态加载jar文件,java,eclipse,jar,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"); } void run (){ System.out.print("b.jar"); } 在b.jar中,run方法实现如下 void run (){

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

void run (){ ...}
在a.jar中,run方法实现如下

void run (){
     System.out.print("a.jar");
}
void run (){
     System.out.print("b.jar");
}
在b.jar中,run方法实现如下

void run (){
     System.out.print("a.jar");
}
void run (){
     System.out.print("b.jar");
}
在我的主应用程序中,我将通过以下操作动态加载其lib文件夹中的exists 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();
    }
}
我的问题是,当我使用EclipseIDE运行main应用程序时,lib文件夹中有a.jar和b.jar,结果是正确的。在控制台中,打印出行“a.jar”和“b.jar”。但是,当我将MainApplication导出到可运行的jar并使用命令行运行时,在控制台中,会打印两行“a.jar”和“a.jar”,尽管在eclipse期间运行时效果良好。
有人能告诉我我做错了什么吗?

谢谢。

如何从命令行运行它?(您不希望将a.jar和b.jar放在类路径上,因为Java将首先在其中查找类,然后再查找您的子类加载器)我使用这个命令运行,“Java-jar mainApplication.jar”a.jar和b.jar不包括在mainApplication的类路径中,应用程序将查看lib文件夹,并在最后加载扩展名为.jar的所有文件