我做了一个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中,没有任何改变。
知道我做错了什么?