如何调试NoSuchMethodError异常? org.hibernate.cfg.Configuration.addAnnotatedClass(Ljava /郎/类;)

时间:2013-10-06 11:32:35

标签: eclipse hibernate maven exception servlets

当我尝试在servlet中初始化Hibernate 4 SessionFactory时:

Configuration config;
ServiceRegistry registry;
SessionFactory factory;
config = new Configuration();
config = config.addAnnotatedClass(Star.class); // <-- Exception here.

我得到一个例外:

SEVERE: Servlet.service() for servlet [hu.adamsan.store.TestHibernate] in context with path [/TestProject] threw exception [Servlet execution threw an exception] with root cause
java.lang.NoSuchMethodError: org.hibernate.cfg.Configuration.addAnnotatedClass(Ljava/lang/Class;)Lorg/hibernate/cfg/Configuration;
at hu.adamsan.store.TestHibernate.doGet(TestHibernate.java:75)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
at 

当我在谷歌中查找时,我找不到解决方案,但是当与hibernate版本不匹配时,会出现类似的错误。我做了一个类似的项目,使用完全相同的maven依赖项,使用相同的代码在doGet方法中初始化hibernate,并且它有效。

maven依赖项:

mysql-connector-java 5.1.26
hibernate-core 4.2.6.Final
hibernate-validator 5.0.1.Final
commons-beanutils 1.8.3
commons-collections 3.2.1
log4j 1.2.17
slf4j-api 1.7.5

有没有人有想法,可能出错? 有人可以提供一般性的建议,如何处理,调试这些模糊的错误?

1 个答案:

答案 0 :(得分:2)

当您在外部库中获得NoSuchMethodError时,通常是由于在类路径上具有相同依赖项的多个版本。这可能是由于传递依赖性,因此仅通过查看项目pom.xml中的依赖项来检测它是不够的。如果您执行mvn dependency:tree,它也会列出所有传递依赖项,因此请查找相同依赖项的多个版本。

也可能是同一个类实现的是多个依赖项,因此google它可以找出包含它的jar。 http://www.jarfinder.com/index.php/java/info/org.hibernate.cfg.Configuration