我正在将web应用程序迁移到JBOSS 7
,但Class.forName
方法有问题。
我基本上有两个罐子,每个罐子在一个不同的模块中:
- Campus组件Java-1.4.4.jar
- CampusGateway-2.5.3-SNAPSHOT.jar
CampusComponentsJava中的代码动态加载CampusGateway-2.5.3-SNAPSHOT.jar中的一个类以以下方式:
Class.forName("edu.uoc.campusgateway.osid.authentication.AuthenticationManager")
我在模块文件夹中创建了两个模块:
<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.1" name="edu.uoc.oki2">
<resources>
<resource-root path="CampusGateway-2.5.3-SNAPSHOT.jar" />
<resource-root path="CampusLauncherJava-1.1.3-SNAPSHOT-filter.jar"/>
<resource-root path="OkiBusJava-1.2.2-config-uoc.jar"/>
<resource-root path="OkiBusXmlSchemas-1.1.1-SNAPSHOT.jar"/>
<resource-root path="OkiOSID-2.0.jar"/>
<resource-root path="JavaUtils-1.1.2-SNAPSHOT.jar"/>
<resource-root path="LibTecsidel.jar"/>
</resources>
<dependencies>
</dependencies>
</module>
和
<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.1" name="edu.uoc.okicomps">
<resources>
<resource-root path="CampusComponentsJava-1.4.4.jar"/>
<resource-root path="CampusComponentsJava-1.4.4-config-uoc.jar"/>
</resources>
<dependencies>
<module name="edu.uoc.oki2" export="true"/>
</dependencies>
</module>
我在后面的标签中表达了模块edu.uoc.okicomps依赖于模块edu.uoc.oki2的想法,因为edu.uoc.okicomps模块的一个jar想要从模块edu.uoc.oki2:的一个jar动态加载一个类
最后,由于Web应用程序需要我在META-INF/MANIFEST.xml 中明确声明的对Web应用程序的两个模块的访问权限的所有jar
Manifest-Version: 1.0
Class-Path:
Dependencies: edu.uoc.okicomps,edu.uoc.oki2
然而,它并没有工作失败,例外情况是:
java.lang.NoClassDefFoundError: Could not initialize class edu.uoc.campusgateway.osid.authentication.AuthenticationManager
任何帮助都将被感激!
事先非常感谢。
我发现了问题。问题是Class.forName由于其自身的性质,执行静态代码和构造函数。
在这种情况下,静态代码试图通过类加载器加载一个属性文件,该文件包含在我忘记添加的另一个jar中。因此,解决我的问题的方法是:
1) 将以下行添加到module.xml
2) 将文件CampusComponentsJava-1.4.4-config-uoc.jar物理添加到modules\edu\uoc\oki2\main文件夹