1

我有两个 jar 文件。第一个仅包含接口,第二个包含所有实现类。我已经在我的应用程序的 ear 文件中包含了第一个 jar,因此在部署我的应用程序时会加载它的类。

根据请求,我尝试在运行时使用 URLClassLoader 从某个文件夹中存在的 .jar 文件加载我的实现类。

这些类正在加载并使用反射我正在创建类的实例,但是在将该实例转换为我包含在 .ear 文件中的 jar 文件中存在的接口时,我的接口类得到了 NoClassDefFoundError。

我确信这是由于我使用不同的类加载器来加载类,但是我如何克服类之间的兼容性问题。

相同的代码在正常的 J2SE 环境中工作,但在 JBoss 骆驼上下文中不工作。

如果我的查询不清楚,请告诉我我也可以粘贴源代码。

4

1 回答 1

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。

于 2013-03-07T07:24:15.390 回答