我有两个jar文件。首先只包含接口&第二个包含所有的实现类。我已经在我的应用程序的ear文件中包含了第一个jar,所以当我的应用程序部署时,它的类就会被加载。
在请求的基础上,我试图加载我的实现类从.jar文件存在于某些文件夹,在运行时使用URLClassLoader。
类正在被加载&使用反射,我正在创建类的实例,但是在将该实例转换为包含在.ear文件中的jar文件中的接口时,我得到了接口类的NoClassDefFoundError。
我确信这是由于我使用不同的类加载器来加载类,但是我如何克服类之间的兼容性问题。
相同的代码在正常的J2SE环境中工作,但在JBoss驼峰上下文中不起作用。
如果我的查询不清楚,请让我知道我也可以粘贴源代码。
你的方法应该在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。