• org.apache.catalina.util.DefaultAnnotationProcessor cannot be cast to org.apache.AnnotationProcessor


    这几天来公司,公司的SVN坏掉了,然后项目还比较大,是一个分布式的,然后同事就把项目发我了。我在myeclipse里面导入项目了,把相应的jar包也建了个人的library导入了项目,现在项目不报错了,但是当我部署到tomcat启动服务器后,访问入口包了这么一个错:java.lang.ClassCastException: org.apache.catalina.util.DefaultAnnotationProcessor cannot be cast to org.apache.AnnotationProcessor


    上面的报错意思就是说类型转换出错。我当时一看这个错应该不是代码级别的错误,遇见这种jar包冲突肯定是导入jar重复了。然后去百度下,网上的博客里面关于这个错误的处理也挺多,这里我自己总结整理下。


    首先出现这个错的原因是:是tomcat的lib文件夹jar包和项目的lib文件下的jar包冲突了。Tomcat中catalina.jar和jasper.jar都有AnnotationProcessor接口,所以运行时,就出错了:java.lang.ClassCastException: org.apache.catalina.util.DefaultAnnotationProcessor。检查是不是这个原因的话,可以去翻自己项目的build path,看看导入的包是不是重复导入了tomcat下lib包。我自己去看了一下,还真的是,那意思就是说部署项目在tomcat下面的时候这些包会自动放入我们的项目的path里面,但是我们自己的项目里面又有这些包了,相当于是这些包就导了2边,所以jar包冲突了,报了上面那个类型转换异常。


    有2种解决的办法:1,把项目下lib文件下和tomcat的jar的重复的全部删除。也就是说把自己的项目里面重复导入tomcat lib下面的那些包都去掉,由于我是同事直接发给我的项目,里面还有好多的项目是java项目,所以我的项目里面要是直接去掉这些包的话代码就会报错,所以我采取了第2种方式


    2,修改了tomcat里的context.xml文件,在context 元素下添加 <Loader delegate="true" />,现在就正常了。
    百度了下这个Loader元素,关于它的解释如下,注意下delegate这个元素就好了。
    Loader对象可出现在Context中以控制Java类的加载。虽然可以改变loadet类,不过一般不会这样做,所以在下面的属性中,我们们列出了标准的属性和“一般”类加载器所接受的属性。
        属性:className、含义:org.apache.catalina.Loader实现类名、默认值:org.apache.catalina.loader.WebappClassLoader
        属性:delegate、含义:True代表使用正式的Java代理模式(先询问父类的加载器);false代表先在Web应用程序中寻找。警告:如果不知道如何处理,则不要改变这一属性值、默认值:FALSE
        属性:loaderClass、含义:类加载器、默认值:org.apache.catalina.loader.WebappClassLoader
        属性:reloadable、含义:与Context下的意义相同。这时的值会改写Context中的值、默认值:FALSE
        属性:workDir、含义:存放临时文件的目录、默认值:CATALINA_BASE下的临时目录(如果不显示设定CATALINA_TOME的值,则是CATALINA_BASE)

  • 相关阅读:
    [Java]去除html中的标签或者元素属性(正则表达式)
    一份非常完整的 MySQL 规范
    前端统计图 echarts 实现简单柱状图
    获取一个表中的字段总数(mysql) Navicat如何导出Excel格式表结构 获取某个库中的一个表中的所有字段和数据类型
    【学习笔记】splay入门(更新中)
    【题解】P1972 [SDOI2009]HH的项链
    【题解】P2024 [NOI2001]食物链
    【题解】P1291 百事世界杯之旅
    【题解】P2602 数字计数
    【题解】P2831 愤怒的小鸟
  • 原文地址:https://www.cnblogs.com/LinkinPark/p/5233081.html
Copyright © 2020-2023  润新知