【发布时间】:2016-03-12 17:42:15
【问题描述】:
我做了一个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中,没有任何改变。
知道我做错了什么吗?
【问题讨论】:
标签: java jar classloader urlclassloader