SSH:hql语句传参报错,及antlr-2.7.2.jar重复包的删除

问题:

使用hql语句时出现

java.lang.reflect.InvocationTargetException(即使用hql回调函数带参数时)

或者是

antlr.collections.AST.getLine()I异常


【解决方法一:myeclipse8.6/10】

我用的myeclipse8.6,(10也是同样的方法)

装在D:\MyEclipse8.6\,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自带的,

所以删除比较麻烦,我觉得最简单的做法应该是这样:

 

【从文件夹中删除antlr-2.7.2.jar】

D:\MyEclipse8.6\MyEclipse-8.6\configuration\org.eclipse.osgi\bundles

下搜索antlr-2.7.2.jar完成后能看到的都删除掉(可能有些是在1.3下面的,有些是在2.1下面的)

 

【从jar中删除antlr-2.7.2.jar】

在D:\MyEclipse8.6\Common\plugins

搜索 *struts*.jar 会发现,出来三个选中一个文件,

 

【1】打开方式选择压缩包,我的winRAR的,com.genuitec.eclipse.cross.easystruts.eclipse_8.6.0.me201007231647.jar

在lib下和data\1.3下要删除antlr-2.7.2.jar(这个是删除1.3里面的)

 

【2】再打开com.genuitec.eclipse.struts2_8.6.0.me201007292038.jar

data\2.1\core 下删除antlr-2.7.2.jar?(这个是2.1里面的)好了,这个就从struts1.3和2.1中移除了,

因为这两个jar是common目录下的,所以删除了后,再运行myeclipse后,

myeclipse就不能再从这两个包中找antlr-2.7.2.jar并加载了。


【注意】如果程序已经运行过,则同时需要删除TOMCAT下的antlr-2.7.2.jar


【解决方法二:myeclipse8.5】

参考:http://blog.csdn.net/wwwihpccn/article/details/5770904

myEclipse8.5下SSH2开发时如何删除antlr-2.7.2包

 

SSH2组合完成后,执行hibernate的HQL查询时,报错:

java.lang.NoSuchMethodError:antlr.collections.AST.getLine()I

 

看来是antlr这个语法解析包出错

因为Struts2.1.8.1自带的antlr-2.7.2.jar,比Hibernate3.3自带的antlr-2.7.6.jar的版本要低,故要在build path里删除前一个低版本的。

 

解决方法:假设你的myEclipse安装在G:/ Genuitec目录下

1)修改myEclipse的安装目录的配置文件:

G:/Genuitec/MyEclipse 8.51/configuration/org.eclipse.osgi/bundles/105/1/.cp/preferences.ini

去掉其中的MYECLIPSE_STRUTS2_DATA_HOME/2.1/core/antlr-2.7.2.jar;/

然后再删除antlr-2.7.2.jar: 有两处

G:/Genuitec/MyEclipse 8.51/configuration/org.eclipse.osgi/bundles/105/1/.cp/data/2.1/data

G:/Genuitec/MyEclipse 8.51/configuration/org.eclipse.osgi/bundles/105/1/.cp/data/2.1core

2)然后会发现在重新发布程序后,又在程序的lib目录下出现,没有真正删除。

继续查看myEclipse的安装目录:仔细寻找相关配置文件。

在myEclipse下,查看struts2包的属性:

melibrary.com.genuitec.eclipse.struts2.MYECLIPSE_STRUTS21_CORE

这是一个myEclipse的变量,查看这个字符串是在哪个文件中定义的。

G:/Genuitec/MyEclipse 8.5 1/configuration/org.eclipse.equinox.simpleconfigurator/bundles.info

找到其中的与struts有关的项,定位到struts2,即看到这个包

G:/Genuitec/Common/plugins/com.genuitec.eclipse.struts2_8.5.0.me201003121946.jar

再查看它,知道有个配置文件“preferences.ini”,修改它,去掉相关antlr-2.7.2.jar信息,然后再去掉包中自带的antlr-2.7.2.jar。

 

所以,最后小结如下:

把G:/Genuitec/Common/plugins/com.genuitec.eclipse.struts2_8.5.0.me201003121946.jar包中的配置修改,并去掉其中的antlr-2.7.2.jar即可。

 

myEclipse的目录分两大类,一类是工作目录,一类是系统目录,而上述的包就放在系统目录中


【解决方法三:myeclipse菜单】

找到个更简单的方法

当在几种框架集成的时候,在调用HibernateDaoSupport中的某个方法时会出现:

 

java.lang.NoSuchMethodError:antlr.collections.AST.getLine()I 的错误。这是因为在struts2自带的

antlr-2.7.2.jar包的版本较低。

 

需要换成antlr-2.7.6.jar。其实在项目中已经存在了antlr-2.7.6.jar这个包,现在唯一需要做的就是删除

antlr-2.7.2.jar包。

 

选择windows---preferences---在文本框中搜索struts 2(中间有空格)---选择struts 2---选择antlr-

2.7.2.jar---Remove---OK。


【备注:Myeclipse整合struts2+hibernate+spring的重复jar包】

antlr-2.7.2(Struts 2 Core Libraries)

antlr-2.7.6(Hibernate 3.2 Core Libraries)

 

aopalliance-1.0(Struts 2 Core Libraries)same

aopalliance    (Spring AOP Libraries)    same

 

asm-2.2.3(Spring AOP Libraries)

asm     (Hibernate 3.2 Core Libraries) -1.5.3

 

commons-collections-2.1.1 (Hibernate 3.2Core Libraries)

commons-collections-3.2   (Struts 2 Core Libraries)

 

commons-lang-2.3(Struts 2 Core Libraries)

commons-lang    (Spring 2.5 Persistence JDBC Libraries)-2.2

 

commons-logging-1.0.4(Hibernate 3.2 CoreLibraries)

commons-logging      (Spring 2.5 Core Libraries)-1.1.1

 

log4j-1.2.11(Hibernate 3.2 Core Libraries)

log4j-1.2.15(Spring 2.5 Core Libraries)

上面jar包重复,可以删除重复jar包,但要注意版本问题

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

于大大大洋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值