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)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: org.apache.catalina.startup.catalina.start是Tomcat服务器启动时的一个类。它是Tomcat启动的入口点,负责加载和初始化Tomcat的各个组件,包括连接器、容器、Web应用程序等。 ### 回答2: org.apache.catalina.startup.catalina.start 是 Apache Tomcat Web 服务器的启动类。Apache Tomcat 是一个开源的、轻量级的、灵活的、用于Java Web开发的Web服务器。它是Java Servlet、JavaServer Pages、Java Expression Language和Java WebSocket的参考实现。该启动类是Tomcat服务器启动时的入口点。 当启动Tomcat服务器时,会首先执行该启动类中的main方法。在该方法中,会完成一系列的初始化操作,包括读取配置文件、创建必要的组件、加载Web应用程序等。 在该启动类中,有许多重要的方法,如start方法、await方法等。start方法用于启动Tomcat服务器,其中会调用一系列的初始化方法,如createServer方法、initialize方法等。await方法用于阻塞当前线程,等待服务器停止命令的到来。 该类还包含一些静态私有方法,用于执行一些具体的启动过程细节,如configureStart方法用于配置服务器的启动参数,createCatalina配置方法用于创建Catalina对象等。 通过阅读org.apache.catalina.startup.catalina.start类的源码,可以更深入地了解Tomcat服务器的启动过程和相关的配置细节。对于开发人员来说,了解这些细节可以帮助他们更好地理解和使用Tomcat服务器。 总之,org.apache.catalina.startup.catalina.start是Tomcat服务器的启动类,负责完成服务器的初始化和启动工作,对于研究和使用Tomcat服务器的开发人员来说,了解这个类的功能和作用非常重要。 ### 回答3: org.apache.catalina.startup.catalina.start是Apache Tomcat中的一个类。 Apache Tomcat是一个开源的Java Servlet容器,用于运行Java Servlet和JSP(JavaServer Pages)的Web应用程序。org.apache.catalina.startup.catalina.start是Tomcat的启动类之一,在Tomcat启动时调用。 该类的主要作用是初始化Tomcat服务器的配置信息,创建服务器并对其进行配置,最后启动服务器。它会加载Tomcat的配置文件,包括server.xml、context.xml等,通过解析这些文件来获取服务器的配置信息。 在启动过程中,org.apache.catalina.startup.catalina.start会初始化Tomcat的Connector,用于处理客户端的请求。它会根据配置文件的设置创建并配置不同的Connector,例如HTTP和HTTPS Connector,用于监听不同的端口。 启动过程中,还会对Tomcat的各项服务和组件进行初始化和配置,例如创建和配置线程池、连接池、Session Manager等。该类还负责加载Web应用程序,并将其部署到Tomcat服务器中。 最后,org.apache.catalina.startup.catalina.start会调用servers的start方法,启动Tomcat服务器。在服务器启动后,它会监听客户端的请求,并将请求分发到相应的Web应用程序进行处理。 总之,org.apache.catalina.startup.catalina.start是Apache Tomcat中负责启动Tomcat服务器的一个重要类,它通过加载配置文件和初始化各项服务和组件,最终启动Tomcat服务器,并监听客户端的请求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值