您的位置:首页 > 其它

解决WebLogic12C与项目中jar包冲突

2016-08-26 14:30 302 查看
环境配置: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文件中添加

[html] view
plaincopy

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

配置:

weblogic.xml 

[html] view
plain copy

<?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>  

问题得到解决。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: