我根据类加载器的文件运行Tomcat 6.0.23,和(http://tomcat.apache.org/tomcat-6.0-doc/class-loader-howto.html)的webapps应该寻找类顺序为:Tomcat的类加载似乎并不表现为记录
- 引导
- 系统
- WEB-INF/classes中
- WEB-INF/lib目录
- 常见
我有一个使用hibernate的web应用程序,而hibernate jars在它的WEB-INF/lib目录中。当它自己运行时,一切正常。
我也有一个jar文件需要坐在tomcat/lib目录中,因为它包含一些需要在启动时加载的类(一个对象工厂和它创建的对象)。这些类使用toplink来实现他们的JPA,这里是我遇到问题的地方。
我需要把toplink jars放在tomcat启动时可以访问的地方,所以我把它们放在tomcat/lib目录下。根据上面列出的类加载的顺序,当使用hibernate的webapp需要hibernate实现类时,它应该在它的WEB-INF/lib目录中找到它们,但实际发生的是它从tomcat/lib中找到了toplink实现类目录,并且我得到一个类转换异常。
任何人都可以请解释为什么我的Web应用程序类没有找到他们需要在他们的WEB-INF/lib目录,或建议一种方法来在运行时调试类路径?
谢谢。
很肯定存在着阶级在Tomcat的/ lib目录覆盖由Hibernate需要以及一些类。所以你最终可能会得到同一类的不同字节码版本,从而导致Hibernate失败。检查重复类名和/或重新设计... – home