1. 程式人生 > >解決WebLogic12C與專案中jar包衝突

解決WebLogic12C與專案中jar包衝突

環境配置: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檔案中新增

  1. <prefer-web-inf-classes>true</prefer-web-inf-classes>
      

配置:

weblogic.xml 

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <weblogic-web-app xmlns="http://www.bea.com/ns/weblogic/90"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">  
  4.     <jsp-descriptor>  
  5.         <keepgenerated>false</keepgenerated>  
  6.         <!--   
  7.         page-check-seconds預設值是1,表示每隔1秒對JSP頁面進行檢查,檢查JSP頁面是否被修改、是否需要重新編譯。  
  8.         系統上線後會影響效能,需要對該預設值修改為-1,表示永不檢查  
  9.         -->  
  10.         <page-check-seconds>-1</page-check-seconds>  
  11.         <verbose>true</verbose>  
  12.         <debug>true</debug>  
  13.     </jsp-descriptor>  
  14.     <container-descriptor>  
  15.         <!-- 指示優先從部署專案的WEB-INF/lib目錄下載入jar包,解決WegLogic與hibernate包衝突問題 -->  
  16.         <prefer-web-inf-classes>true</prefer-web-inf-classes>  
  17.         <!-- servlet-reload-check-secs的預設值也是1,每隔1秒檢查servlet是否被修改並需要重新編譯,  
  18.         很影響效能。這裡建議修改為-1,表示永不檢查  
  19.         -->  
  20.         <servlet-reload-check-secs>-1</servlet-reload-check-secs>  
  21.     </container-descriptor>  
  22.     <context-root>/</context-root>  
  23. </weblogic-web-app>  


問題得到解決。

最後歡迎大家訪問我的個人網站:1024s