[英]Can't deploy a jar on Jboss EAP6 with error 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.