如何在运行时从文件夹加载jar文件&在JBoss EAP 6.0.1中实例化类

时间:2013-03-07 05:08:10

标签: java java-ee reflection jboss classloader

我有两个jar文件。 首先只包含接口&第二个包含所有实现类。 我已将第一个jar包含在我的应用程序的ear文件中,因此在部署应用程序时它的类将被加载。

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

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

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

相同的代码在普通的J2SE环境中有效,但它在JBoss驼峰上下文中不起作用。

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

1 个答案:

答案 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。