Я сделал проект Java, проект contais только этот класс:Java Dynammic Класс нагрузки в веб-приложение
package test.processor;
public abstract class Processor {
public abstract void loadData(String objectId);
public abstract void processData();
public abstract void saveData(String objectId);
}
Проект экспортируется в виде файла банку (processor.jar)
Тогда я сделал еще проект, который импортирует processor.jar и есть класс, который расширяет Процессор:
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");
}
}
Этот проект также экспортируется в баночке (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;
}
}
Если я запускаю этот код внутри основного метода он работает правильно, когда я пытаюсь запустить его на сервере возникает проблема при загрузке класс, я получаю ClassNotFoundException (Процессор). Я попытался положить банку в tomcat/lib, project/WEB-INF/lib и ничего не изменилось.
Любая идея о том, что я делаю неправильно?