Eclipse Hibernate工具的错误: “Fetching children of Database”解决办法

首先确认一下环境,我的eclipse是3.6.2,即helios,使用的hibernate插件是Hibernate Tools,从jboss的源下载的。
全部错误提示为
java.lang.NoSuchMethodError:An internal error occurred during: "Fetching children of Database".org.slf4j.spi.LocationAwareLogger.log(Lorg/slf4j/Marker;Ljava/lang/String;ILjava/lang/String;[Ljava/lang/Object;Ljava/lang/Throwable;)V
本质上说,这是由于slf4j版本冲突造成的,因为依赖log的类库太多,根本已经无法区分自己的jar包哪个如何依赖了,而可以确定的是,hibernate tools自己是指定的slf4j的1.5.8版本,这个版本的这个接口的参数是和报错的不一致的,报错使用的参数是1.6以上版本的,也就是说,有些地方引用了高版本的slf4j,导致了冲突。我根据网上的很多方法修改这,修改那,发现都不起作用。

我在Hibernate Tools的lib文件夹里面放入高版本的slf4j,发现它并不去读高版本,依然读低版本,如果删除掉1.5.8的jar包(eclipse打开时,删不掉,会告诉你正在使用,这也正说明,它无论如何都会去读名字为xxx.1.5.8.jar的包),它也不会去读高版本的包,而且运行eclipse的时候,直接告诉你,连最基本的slf4j的类都找不到了。完全不知道它在哪里显式的指定了1.5.8的包。

解决办法】于是,我只能做了一种并不是最好的办法,但的确解决了问题。关闭eclipse后,把1.5.8的包备份,然后用我的1.6.6的包,将名字改为xxx.1.5.8,然后重新启动eclipse。于是,OK了!!!!它果然还是去读名字为1.5.8的包,而我则狸猫换太子了。因为slf4j向下兼容是比较好的,不知道这里什么地方强制调用了1.5.x的类。用了1.6.6以后,一切都OK了,这个错误也不再报了,也不会跟其他用高版本slf4j的插件之类的冲突了,至此,问题解决,希望对别人有所帮助。

你可能感兴趣的:(Web开发)