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包,但要注意版本問題
總結
以上是生活随笔為你收集整理的SSH:hql语句传参报错,及antlr-2.7.2.jar重复包的删除的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Servlet页面跳转实现方法的区别
- 下一篇: div 图片滚动 / 文字滚动