我有两个jar文件。 首先只包含接口&第二个包含所有实现类。 我已将第一个jar包含在我的应用程序的ear文件中,因此在部署应用程序时它的类将被加载。
在请求的基础上,我尝试使用URLClassLoader在运行时从某个文件夹中的.jar文件加载我的实现类。
课程正在加载&使用反射我正在创建类的实例,但是当将该实例转换为包含在.ear文件中的jar文件中的接口时,我的接口类得到了NoClassDefFoundError。
我确信这是由于我用来加载类的不同类加载器,但是如何克服这些类之间的兼容性问题。
相同的代码在普通的J2SE环境中有效,但它在JBoss驼峰上下文中不起作用。
如果我的查询不清楚,请告诉我我也可以粘贴源代码。
答案 0 :(得分:2)
您的方法应该适用于JBossEAP 6,这就是我在JBossAS7.1上所做的。
class YourClassLoader extends URLClassLoader {
...
public YourClassLoader() {
this(YourClassLoader.class.getClassLoader());
...
this.addURL(jarfile.toURI().toURL());
...
}
...
}
Class<?> yourClass = yourClassLoader.loadClass(className);
YourClassInterface yourClassInterface = null;
yourClassInterface = (YourClassInterface ) yourClass.newInstance();
请尝试使用相同的URLClassLoader加载接口jar。