java.lang.NoSuchMethodError: antlr.collections.AST.getLine()I
问题症状:可以在main方法里通过获得业务逻辑bean来查询数据库,但通过网页传参到action里再调用业务逻辑查询数据库,
即会出现这种异常提示。
原因:项目里有这两个jar包产生了冲突所致:antlr-2.7.6.jar和anltr-2.7.2.jar。将anltr-2.7.2.jar包删除即可。
之所以在main方法里能够顺利执行是因为:antlr.jar包是Struts2所依赖的。不通过网页传参,就不需要它,所以能够顺利执行。
解决:
网上已有方案:
(1)在build path中将hibernate移到struts上面
(2)或者直接删除struts中的antlr包,清理tomcat缓存(.me_tcat7\work\Catalina\localhost下的文件)
独创方案:
直接删除tomcat或者myeclipse有可能会自动又给加上来(除非保证全部删干净):删除struts中的antlr包后,从hibernate中antlr-2.7.6.jar拷贝过来(可以jar里面放一个名为2.7.6的txt文件,用于区别这是拷贝过来的),并且重命名为antlr-2.7.2.jar.
(struts中的antlr包和hibernate中antlr-2.7.6.jar的实际路径可以在Myeclipse的package视图里看到)
ok了,清净了。
(注意以后其他项目使用到struts1时实际用到的该报都是2.7.6)
struts2中也可以参照这个思路