SSH:hql语句传参报错,及antlr-2.7.2.jar重复包的删除
問(wèn)題:
使用hql語(yǔ)句時(shí)出現(xiàn)
java.lang.reflect.InvocationTargetException(即使用hql回調(diào)函數(shù)帶參數(shù)時(shí))
或者是
antlr.collections.AST.getLine()I異常
【解決方法一:myeclipse8.6/10】
我用的myeclipse8.6,(10也是同樣的方法)
裝在D:\MyEclipse8.6\,SSH組合完成后,執(zhí)行hibernate的HQL查詢時(shí),
報(bào)錯(cuò):java.lang.NoSuchMethodError:antlr.collections.AST.getLine()I
?
看來(lái)是antlr這個(gè)語(yǔ)法解析包出錯(cuò)
?
因?yàn)镾truts自帶的antlr-2.7.2.jar,比Hibernate3.3自帶的antlr-2.7.6.jar的版本要低,
故要?jiǎng)h除前一個(gè)低版本的,
?
struts1.3和2.1都帶有antlr-2.7.2.jar,下面我要把它們都清除了,
由于myeclipse添加的struts性能不是放在工程lib下的,而是myeclipse自帶的,
所以刪除比較麻煩,我覺得最簡(jiǎn)單的做法應(yīng)該是這樣:
?
【從文件夾中刪除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 會(huì)發(fā)現(xiàn),出來(lái)三個(gè)選中一個(gè)文件,
?
【1】打開方式選擇壓縮包,我的winRAR的,com.genuitec.eclipse.cross.easystruts.eclipse_8.6.0.me201007231647.jar
在lib下和data\1.3下要?jiǎng)h除antlr-2.7.2.jar(這個(gè)是刪除1.3里面的)
?
【2】再打開com.genuitec.eclipse.struts2_8.6.0.me201007292038.jar
data\2.1\core 下刪除antlr-2.7.2.jar?(這個(gè)是2.1里面的)好了,這個(gè)就從struts1.3和2.1中移除了,
因?yàn)檫@兩個(gè)jar是common目錄下的,所以刪除了后,再運(yùn)行myeclipse后,
myeclipse就不能再?gòu)倪@兩個(gè)包中找antlr-2.7.2.jar并加載了。
【注意】如果程序已經(jīng)運(yùn)行過(guò),則同時(shí)需要?jiǎng)h除TOMCAT下的antlr-2.7.2.jar
【解決方法二:myeclipse8.5】
參考:http://blog.csdn.net/wwwihpccn/article/details/5770904
myEclipse8.5下SSH2開發(fā)時(shí)如何刪除antlr-2.7.2包
?
SSH2組合完成后,執(zhí)行hibernate的HQL查詢時(shí),報(bào)錯(cuò):
java.lang.NoSuchMethodError:antlr.collections.AST.getLine()I
?
看來(lái)是antlr這個(gè)語(yǔ)法解析包出錯(cuò)
因?yàn)镾truts2.1.8.1自帶的antlr-2.7.2.jar,比Hibernate3.3自帶的antlr-2.7.6.jar的版本要低,故要在build path里刪除前一個(gè)低版本的。
?
解決方法:假設(shè)你的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)然后會(huì)發(fā)現(xiàn)在重新發(fā)布程序后,又在程序的lib目錄下出現(xiàn),沒(méi)有真正刪除。
繼續(xù)查看myEclipse的安裝目錄:仔細(xì)尋找相關(guān)配置文件。
在myEclipse下,查看struts2包的屬性:
melibrary.com.genuitec.eclipse.struts2.MYECLIPSE_STRUTS21_CORE
這是一個(gè)myEclipse的變量,查看這個(gè)字符串是在哪個(gè)文件中定義的。
G:/Genuitec/MyEclipse 8.5 1/configuration/org.eclipse.equinox.simpleconfigurator/bundles.info
找到其中的與struts有關(guān)的項(xiàng),定位到struts2,即看到這個(gè)包
G:/Genuitec/Common/plugins/com.genuitec.eclipse.struts2_8.5.0.me201003121946.jar
再查看它,知道有個(gè)配置文件“preferences.ini”,修改它,去掉相關(guān)antlr-2.7.2.jar信息,然后再去掉包中自帶的antlr-2.7.2.jar。
?
所以,最后小結(jié)如下:
把G:/Genuitec/Common/plugins/com.genuitec.eclipse.struts2_8.5.0.me201003121946.jar包中的配置修改,并去掉其中的antlr-2.7.2.jar即可。
?
myEclipse的目錄分兩大類,一類是工作目錄,一類是系統(tǒng)目錄,而上述的包就放在系統(tǒng)目錄中
【解決方法三:myeclipse菜單】
找到個(gè)更簡(jiǎn)單的方法
當(dāng)在幾種框架集成的時(shí)候,在調(diào)用HibernateDaoSupport中的某個(gè)方法時(shí)會(huì)出現(xiàn):
?
java.lang.NoSuchMethodError:antlr.collections.AST.getLine()I 的錯(cuò)誤。這是因?yàn)樵趕truts2自帶的
antlr-2.7.2.jar包的版本較低。
?
需要換成antlr-2.7.6.jar。其實(shí)在項(xiàng)目中已經(jīng)存在了antlr-2.7.6.jar這個(gè)包,現(xiàn)在唯一需要做的就是刪除
antlr-2.7.2.jar包。
?
選擇windows---preferences---在文本框中搜索struts 2(中間有空格)---選擇struts 2---選擇antlr-
2.7.2.jar---Remove---OK。
【備注:Myeclipse整合struts2+hibernate+spring的重復(fù)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包重復(fù),可以刪除重復(fù)jar包,但要注意版本問(wèn)題
總結(jié)
以上是生活随笔為你收集整理的SSH:hql语句传参报错,及antlr-2.7.2.jar重复包的删除的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Servlet页面跳转实现方法的区别
- 下一篇: div 图片滚动 / 文字滚动