WILDFLY - 动态加载 jar java.lang.ClassNotFoundException
WILDFLY - Loading jar dynamically java.lang.ClassNotFoundException
我在 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 class 实现了使用 EAR 加载到另一个 jar 中的 IProcess。
当我 运行 服务器代码和 class 被转换时,我收到:
java.lang.NoClassDefFoundError: com/package/test/process/IProcess
如果我在正在加载的 JAR 中添加接口,问题是 CastException,因为 wildfly 加载的 com/package/test/process/IProcess 与 JAR 加载的不同。
我需要接收 IProcess(转换对象),因为解决方案是使用 Mehtod.invoke 直接调用方法,但这不是我的问题的解决方案。
提前致谢。
这个技巧非常有效:
URLClassLoader.newInstance(新URL[]{file.toURL()}, IProcess.class.getClassLoader())
感谢 Steve C!
我在 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 class 实现了使用 EAR 加载到另一个 jar 中的 IProcess。
当我 运行 服务器代码和 class 被转换时,我收到:
java.lang.NoClassDefFoundError: com/package/test/process/IProcess
如果我在正在加载的 JAR 中添加接口,问题是 CastException,因为 wildfly 加载的 com/package/test/process/IProcess 与 JAR 加载的不同。
我需要接收 IProcess(转换对象),因为解决方案是使用 Mehtod.invoke 直接调用方法,但这不是我的问题的解决方案。
提前致谢。
这个技巧非常有效:
URLClassLoader.newInstance(新URL[]{file.toURL()}, IProcess.class.getClassLoader())
感谢 Steve C!