我在wildfly中部署了一个EAR,并且我使用以下代码从源代码加载jar:
File file = new File("C:\\XXXX\\XXXX\\ProcessTest.jar");
String lcStr = "com.package.test.TestProcess";
URLClassLoader cl = URLClassLoader.newInstance(new URL[]{file.toURL()});
Class<?> loadedClass;
try {
loadedClass = cl.loadClass(lcStr);
IProcess data = (IProcess)loadedClass.newInstance();
data.start();
} catch (Exception e) {
e.printStackTrace();
}
TestProcess类实现了使用EAR加载到另一个jar中的IProcess。
当我运行服务器代码并且正在进行类化时,我会收到:
java.lang.NoClassDefFoundError:com / package / test / process / IProcess
如果我在JAR中添加了我加载问题的接口是CastException,因为wildfly加载的com / package / test / process / IProcess与加载JAR的不同。
我需要接收IProcess(转换对象),因为解决方案直接使用Mehtod.invoke调用方法,但它不能解决我的问题。
先谢谢了。
答案 0 :(得分:0)
这个技巧完美无缺:
URLClassLoader.newInstance(new URL [] {file.toURL()},IProcess.class.getClassLoader())
感谢Steve C!