关于java.lang.NoSuchMethodError: antlr.collections.AST.getLine()I异常的解决办法

来源:互联网 发布:误关windows资源管理器 编辑:程序博客网 时间:2024/06/06 05:20

今天在写一个比较简单的学生信息管理系统,采用了Struts2+Hibernate的配置,写完了登录页面之后,开始在浏览器调试,写完用户名和密码点击登录,跳转到Action时,

出现了java.lang.NoSuchMethodError:antlr.collections.AST.getLine()I异常,然后百度之,得知可能的原因是jar包冲突,web.xml 或Struts.xml配置错误,POJO与映射文件不匹配等原因呢,之后一一排除,删除版本较低的jar包,检查DAO操作,倒是找到几处小错误,总之搞了两个多小时都没能解决,然后 开始漫长的syso,发现List list 。。。。。没有执行,执行单元测试发现方法没有问题,于是断定不是类的问题,又回到了jar包冲突中。

                用myeclipse自己导的包,出现了包版本冲突问题,问题出在struts包里面有也有个antlr_XXX.jar,与hibernate包里面的冲突了,hibernate的版本高
SSH组合完成后,执行hibernate的HQL查询时,报错:
java.lang.NoSuchMethodError: antlr.collections.AST.getLine()I
看来是antlr这个语法解析包出错
因为Struts自带的antlr-2.7.2.jar,比Hibernate3.3自带的antlr-2.7.6.jar的版本要低,故要删除前一个低版本的,struts1.3 和2.1都带有antlr-2.7.2.jar,要把版本低的清除掉。
由于myeclipse 添加的struts性能 不是放在工程lib下的,而是myeclipse自带的,所以删除比较麻烦。
我是直接到workspace中查找下antlr-2.7.2.jar的包,删除之,也可以在MyEclipse下,windows-->preferences-->在文本框中搜索struts2-->选择antlr2.7.2-->remove,

在tomcat中webapps中该应用的目录WEB-INF\lib 删除 antlr2.7.2.jar

之后编译时就会自动找到Hibernate3.3自带的antlr-2.7.6.jar。
问题解决。

 

System.out.println("为学生");String hql = "select s from Student as s where s.number =? and s.wps=?";System.out.println("为学生3");@SuppressWarnings("rawtypes")List list =this.session.createQuery(hql)//.setString(0, name)//.setString(1, password)//.list();System.out.println(list);System.out.println("为学生3"+list);  if(list!=null){System.out.println("为学生4");return true;}System.out.println("asdasdasd");return false;


 

0 0
原创粉丝点击