tomcat启动报错:Context namespace element 'component-scan' and its parser class [...]只能有效的jdk1.5及以上

林祯
2023-12-01

问题描述:

在启动tomcat时:报错如下

严重: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener org.springframework.beans.factory.BeanDefinitionStoreException: Unexpected exception parsing XML document from class path resource [ftxInterfaceConfig/spring-context.xml]; nested exception is java.lang.IllegalStateException: Context namespace element 'component-scan' and its parser class [org.springframework.context.annotation.ComponentScanBeanDefinitionParser] are only available on JDK 1.5 and higher

......

Caused by: java.lang.IllegalStateException: Context namespace element 'component-scan' and its parser class [org.springframework.context.annotation.ComponentScanBeanDefinitionParser] are only available on JDK 1.5 and higher

根据报错信息中问题指向ftxInterfaceConfig/spring-context.xml配置文件中的'<component-scan>'元素

分析:

1 正常来说报这个错误的原因(由于我使用的jdk1.8)

   JDK使用1.8以上且spring版本过低导致,原因见下:

          Spring 大于等于3.2.3(具体版本问题持保留意见,但意思指高版本才支持)的版本才可以支持Java 8

2 因此解决办法有2个:

   2.1 升级spring的版本

   2.2 使用JDK1.7

3 但是发现我使用的是JDK1.8,但是spring的版本为4.3.7,是支持1.8的

4 后来发现是由于pom.xml文件中加了一个依赖为:

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>dubbo</artifactId>
    <version>2.5.4.aicai-SNAPSHOT</version>
</dependency>

  错误就在这:加入了dubbo的依赖之后,由于dubbo中又依赖了spring,且版本与自己加的spring依赖不一样,导致冲突

5 最终解决:

   把dubbo中依赖的spring不级联进来,所以最终为:

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>dubbo</artifactId>
    <version>2.5.4.aicai-SNAPSHOT</version>
    <exclusions>
        <exclusion>
            <groupId>org.springframework</groupId>
            <artifactId>spring</artifactId>
        </exclusion>
    </exclusions>
</dependency>

 

 类似资料: