繁体   English   中英

JBOSS 7 EAP中属于用户定义的jar的类的java.lang.NoClassDefFoundError

[英]java.lang.NoClassDefFoundError for class belonging to user-defined jar in JBOSS 7 EAP

02:35:43,076 WARN  [org.jboss.modules] (default task-8) Failed to define class com.karthik.db.jpub.mapping.ObjUser in Module "deployment.CVRepo.war:main" from Service M
odule Loader: java.lang.NoClassDefFoundError: Failed to link com/karthik/db/jpub/mapping/ObjUser (Module "deployment.CVRepo.war:main" from Service Module Loader): oracle/sql/ORAData
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:422)
        at org.jboss.modules.ModuleClassLoader.defineClass(ModuleClassLoader.java:446)
        at org.jboss.modules.ModuleClassLoader.loadClassLocal(ModuleClassLoader.java:274)
        at org.jboss.modules.ModuleClassLoader$1.loadClassLocal(ModuleClassLoader.java:78)
        at org.jboss.modules.Module.loadModuleClass(Module.java:605)
        at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:190)
        at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:363)
        at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:351)

在这里,ObjUser类属于Data.jar。 Data.jar存在于CVRepo.war的WEB-INF / lib文件夹中
1)即使将包含类ObjUser.class的jar-data.jar打包在CVRepo.war中,也是导致此错误的原因。
2)是否应该从WAR的WEB-INF / lib文件夹中删除外部jars(data.jar),并将其作为模块添加并在JBOSS 7中的WAR的jboss-deployment.xml中进行引用?

通常会引发NoClassDefFoundError,因为该类不在类路径中,这可能是由于应用程序打包或指定的类加载器隔离设置所致。 查看Tattletale报告:类位置以找到打包位置,并与为特定部署类型定义的隔离设置和Java EE类路径进行比较。

注意:如果该类在应用程序中不存在,并且java源文件未列出该类,请使用javap或其他反编译器反编译该类,并查看该类定义是否与源匹配。 当类路径缺少类​​时,某些IDE可能会生成无效的类,它们会生成具有无效类引用的类,如果部署这些类引用,则会导致异常的ClassNotFoundExceptions(例如,没有包的类名)。

当JVM尝试加载类的定义且找不到定义时,将引发NoClassDefFoundError。 NoClassDefFoundError通常是由ClassNotFoundException或ExceptionInInitializerError引起的。 在初始ClassNotFoundException / ExceptionInInitializerError之后,JVM只会抛出NoClassDefFoundError,而不会显示原始原因。

查看完整的server.log并找到第一个类加载异常

请参阅链接基本的类加载内容: https : //docs.jboss.org/author/display/AS71/Class+Loading+in+AS7

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM