我在Blackboard上的Building Block中使用Spring 3.1.1.RELEASE和Hibernate 4.1.10.FINAL了解并获得以下异常:
java.lang.NoClassDefFoundError:无法初始化类org.hibernate.cfg.PropertyContainer
这似乎是一个类路径问题,所以我做了一些挖掘并添加了this post中建议的库,但是发生了同样的错误。
所以我的classpath现在包含必要的依赖项,但我仍然得到异常。我可以通过哪些额外的观点来确定和解决这个问题?
编辑:我已经验证了jboss-logging JAR在我的类路径中。
编辑:请求的堆栈跟踪:https://gist.github.com/whargrove/79cbc9c5bd65217e3da3
重新启动Tomcat并重新部署WAR后,Tomcat日志中会出现以下异常:
(上面的gist链接中提供了完整的堆栈跟踪。)
答案 0 :(得分:0)
消息
java.lang.NoClassDefFoundError:无法初始化类 SomeClass
表示JVM已尝试并且无法在类 SomeClass 上执行静态初始化。当JVM第一次尝试加载类时,可能会发生另一个错误。
看一下source of the PropertyContainer class,唯一的静态初始化是一个设置系统属性的静态初始化器,以及一个初始化该类记录器的行。设置系统属性将不应该导致问题,所以我的猜测是你的类路径中缺少使用的记录器类。
使用的记录器类是org.jboss.logging.Logger
。这个类的一个快速谷歌建议一个名为jboss-logging.jar的jar。尝试获取该副本并将其添加到类路径中。
(顺便说一句,如果你无法在'无法初始化类错误之前找到先前的错误,那可能是因为缺少的JAR会影响日志记录。日志记录是应用程序倾向于假设的总是工作,可以在任何地方使用。你看到的异常可能是从finally
块中抛出的,当相应的try
块也尝试进行一些记录但是扔了从finally
块中抛出的异常替换先前抛出的任何异常。)
编辑以响应堆栈跟踪:我现在可以看到设置系统属性不是问题我错了!我不知道关于Blackboard Learn的第一件事,但它或其他东西可能会加强你的应用程序的安全性,从而导致上述问题。
但它确实证实了我认为问题的真正原因是在Could not initialize class
消息之前。