在webapp

时间:2015-12-07 23:13:15

标签: java jar classloader urlclassloader

我做了一个java项目,该项目只包含这个类:

package test.processor;

public abstract class Processor {

    public abstract void loadData(String objectId);
    public abstract void processData();
    public abstract void saveData(String objectId);

}

项目导出为jar文件(processor.jar)

然后我创建了另一个导入processor.jar的项目,并且有一个扩展Processor的类:

package test.process;

import test.processor.Processor;

public class Process extends Processor{

    @Override
    public void loadData(String objectId) {
        System.out.println("LOAD DATAAAAAAAAAAAA");     
    }

    @Override
    public void processData() {
        System.out.println("PROCESS DATAAAAAAAAAAAA");
    }

    @Override
    public void saveData(String objectId) {
        System.out.println("SAVE DATAAAAAAAAAAAA");
    }

}

此项目也导出为jar(plugin.jar)。

最后,我编写了一些动态加载插件的内容:

import test.processor.Processor;

public class Test {

    public void testPlugins(){

        Processor plugin = (Processor) loadJar(
                "C:\\Users\\...\\Desktop\\plugin.jar",
                "test.process.Process");
        processor.loadData("dada");

    }

    private Object loadJar(String jar, String className){

        File jarFile = new File(jar);
        Object instance = null;
        try {
            URL jarpath = jarFile.toURI().toURL();
            String jarUrl = "jar:" + jarpath + "!/";
            URL urls[] = { new URL(jarUrl) };
            URLClassLoader child = new URLClassLoader(urls);
            Class classToLoad = Class.forName(nomeClasse, true, child);
            instance = classToLoad.newInstance();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return instance;

    }


} 

如果我在main方法中运行该代码它可以正常工作,一旦我尝试在服务器中运行它,加载类时出现问题,我得到一个ClassNotFoundException(处理器)。 我尝试将jar放在tomcat / lib,project / WEB-INF / lib中,没有任何改变。

知道我做错了什么?

0 个答案:

没有答案