开发者社区> 问答> 正文

dubbo部署到tomcat启动后显示管理界面后点击任何按钮都报错,错误如下?报错

java.lang.NoClassDefFoundError: Could not initialize class com.alibaba.citrus.util.internal.Servlet3Util
com.alibaba.citrus.service.requestcontext.impl.RequestContextChainingServiceImpl.getRequestContext(RequestContextChainingServiceImpl.java:246)
com.alibaba.citrus.webx.support.AbstractWebxRootController.getRequestContext(AbstractWebxRootController.java:352)
com.alibaba.citrus.webx.support.AbstractWebxRootController.service(AbstractWebxRootController.java:148)
com.alibaba.citrus.webx.servlet.WebxFrameworkFilter.doFilter(WebxFrameworkFilter.java:152)
com.alibaba.citrus.webx.servlet.FilterBean.doFilter(FilterBean.java:148)
com.alibaba.citrus.webx.servlet.SetLoggingContextFilter.doFilter(SetLoggingContextFilter.java:61)
com.alibaba.citrus.webx.servlet.FilterBean.doFilter(FilterBean.java:148)


jdk是1.8  改了一些dubbo后台的依赖引入:

1、webx的依赖改为3.1.6版;

    <dependency>
        <groupId>com.alibaba.citrus</groupId>
        <artifactId>citrus-webx-all</artifactId>
        <version>3.1.6</version>
    </dependency>
2、添加velocity的依赖,我用了1.7;

    <dependency>
        <groupId>org.apache.velocity</groupId>
        <artifactId>velocity</artifactId>
        <version>1.7</version>
    </dependency>
3、对依赖项dubbo添加exclusion,避免引入旧spring

    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>dubbo</artifactId>
        <version>${project.parent.version}</version>
        <exclusions>
            <exclusion>
                <groupId>org.springframework</groupId>
                <artifactId>spring</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
4、webx已有spring 3以上的依赖,因此注释掉dubbo-admin里面的spring依赖

    <!--<dependency>-->
        <!--<groupId>org.springframework</groupId>-->
        <!--<artifactId>spring</artifactId>-->
    <!--</dependency>-->

启动到dubbo后台首页正常,点击任何按钮就报错了


确认没有引进spring  3以下版本,没有citrus-webx-all冲突包,citrus-webx-all的jar包有在lib目录下
请大神帮忙解决下

展开
收起
爱吃鱼的程序员 2020-06-09 15:02:56 619 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB
    确认没有引进spring3以下版本

    什么意思??我记得dubbo本来就不支持spring3啊.

    不是这问题,我用的是2.5.4版本的,2.5.3才不兼容当当有个dubbox,这个项目才是把dubbox的spring升级到3

    看了下Servlet3Util源码

     
      packagecom.alibaba.citrus.util.internal
      
       ;
       
        
         importstaticcom.alibaba.citrus.util.Assert.*
         
          ;
          
           importstaticcom.alibaba.citrus.util.CollectionUtil.*
           
            ;
            
             
              importjava.io.IOException
              
               ;
               
                importjava.lang.reflect.InvocationTargetException
                
                 ;
                 
                  importjava.lang.reflect.Method
                  
                   ;
                   
                    importjava.util.EventListener
                    
                     ;
                     
                      importjava.util.List
                      
                       ;
                       
                        importjavax.servlet.ServletOutputStream
                        
                         ;
                         
                          importjavax.servlet.WriteListener
                          
                           ;
                           
                            importjavax.servlet.http.HttpServletRequest
                            
                             ;
                             
                              
                               importnet.sf.cglib.reflect.FastClass
                               
                                ;
                                
                                 importnet.sf.cglib.reflect.FastMethod
                                 
                                  ;
                                  
                                   
                                    /**
                                    
                                     *Servlet3.0Support
                                     
                                      -即使在非
                                      
                                       servlet3.0
                                       
                                        的环境中,也不会出错。
                                        
                                         
                                          *
                                          
                                           此类会引用如下几个
                                           
                                            Servlet3.0
                                            
                                             的接口。在
                                             
                                              Servlet2.5
                                              
                                               的环境中,接口由
                                               
                                                <code>citrus-common-servlet</code>
                                                
                                                 项目提供。
                                                 
                                                  
                                                   *<ul>
                                                   
                                                    *<li><code>WriteListener</code></li>
                                                    
                                                     *</ul>
                                                     
                                                      *
                                                      
                                                       *@authorMichaelZhou
                                                       
                                                        */
                                                        
                                                         publicclassServlet3Util{
                                                        
                                                       
                                                      
                                                     
                                                    
                                                   
                                                  
                                                 
                                                
                                               
                                              
                                             
                                            
                                           
                                          
                                         
                                        
                                       
                                      
                                     
                                    
                                   
                                  
                                 
                                
                               
                              
                             
                            
                           
                          
                         
                        
                       
                      
                     
                    
                   
                  
                 
                
               
              
             
            
           
          
         
        
       
      
     
    注释说明需要使用servlet3.0的版本,所以换了tomcat8,启动后正常

    servlet2.5版本是没有WriteListener类的

    2020-06-09 15:03:15
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Dubbo开源现状与2.7规划 立即下载
Dubbo分布式服务治理实战 立即下载
《Dubbo 3.0 前瞻》 立即下载