我将我的网络应用程序迁移到JBOSS 7
,我遇到了Class.forName
方法的问题。
我基本上有2个罐子,每个罐子在一个不同的模块中:
CampusComponentsJava中的代码动态加载来自CampusGateway-2.5.3-SNAPSHOT.jar的类 通过以下方式:
Class.forName("edu.uoc.campusgateway.osid.authentication.AuthenticationManager")
我在modules文件夹中创建了2个模块:
<?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要从一个jar中动态加载一个类。模块edu.uoc.oki2:
最后,由于webapp需要所有jar,我已声明明确访问META-INF / MANIFEST.xml中webapp的两个模块
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
任何帮助都会被贬低!
非常感谢你。
答案 0 :(得分:0)
我发现了问题。问题是Class.forName由于其自身的性质,执行静态代码和构造函数。
在这种情况下,静态代码尝试通过类加载器加载一个属性文件,该文件包含在我忘记添加的另一个jar中。所以解决我的问题是:
1)将以下行添加到module.xml
2)将物理上的CampusComponentsJava-1.4.4-config-uoc.jar添加到 modules \ edu \ uoc \ oki2 \ main文件夹