解決WebLogic12C與專案中jar包衝突
阿新 • • 發佈:2019-02-03
環境配置:weblogic12C Struts2.1.8+Spring2.5+Hibernate 3.3
問題描述:專案在tomcat7下執行正常,但部署在WebLogic12C下執行時,就有如下異常:
ClassNotFoundException: org.hibernate.hql.ast.HqlToken
語法解析器異常,提示找不到指定的Class
產生以上問題的原因是WebLogic為了去分析EJBQL,帶有自己的Antlr.jar包,與專案中Hibernate的Antlr.jar包有衝突。
解決以上問題思路是讓JVM優先載入web專案的antlr.jar包,而不是weblogic自帶的較低版本的antlr.jar包。
一、如果是在MyEclipse中啟動:
在MyEclipse的Preferences->Server->WebLogic->WebLogic10.x配置
展開Paths,在Prepend to classPath,將web專案lib目錄下的antlr-2.7.6.jar包加入:
通過上面配置,啟動WebLogic,問題解決。
二、如果是直接啟動WebLogic部署,只需要在專案的WEB-INF/WebLogic.xml檔案中新增
- <prefer-web-inf-classes>true</prefer-web-inf-classes>
配置:
weblogic.xml
- <?xml version="1.0" encoding="UTF-8"?>
- <weblogic-web-app xmlns="http://www.bea.com/ns/weblogic/90"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
- <jsp-descriptor>
- <keepgenerated>false</keepgenerated>
- <!--
- page-check-seconds預設值是1,表示每隔1秒對JSP頁面進行檢查,檢查JSP頁面是否被修改、是否需要重新編譯。
- 系統上線後會影響效能,需要對該預設值修改為-1,表示永不檢查
- -->
- <page-check-seconds>-1</page-check-seconds>
- <verbose>true</verbose>
- <debug>true</debug>
- </jsp-descriptor>
- <container-descriptor>
- <!-- 指示優先從部署專案的WEB-INF/lib目錄下載入jar包,解決WegLogic與hibernate包衝突問題 -->
- <prefer-web-inf-classes>true</prefer-web-inf-classes>
- <!-- servlet-reload-check-secs的預設值也是1,每隔1秒檢查servlet是否被修改並需要重新編譯,
- 很影響效能。這裡建議修改為-1,表示永不檢查
- -->
- <servlet-reload-check-secs>-1</servlet-reload-check-secs>
- </container-descriptor>
- <context-root>/</context-root>
- </weblogic-web-app>
問題得到解決。
最後歡迎大家訪問我的個人網站:1024s