ComponentScanBeanDefinitionParser are only available on JDK 1.5 and higher出现原因以及解决方法:

本文详细介绍了在使用Spring 2.5.6与JDK1.8进行单元测试时遇到的兼容性问题及解决方案。通过修改Spring的JdkVersion类,使Spring支持JDK1.8,避免了降低JDK版本的需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、环境:Windows10+sts+jdk1.8+spring.2.5.6

2、出现这种问题的原因:spring.2.5.6.jar不支持jdk1.8,只支持jdk1.6和jdk1.7(jdk1.5支持不支持没做测试,我也不知道。。。)

3、这种问题出现的场景:在做spring相关的Junit测试时,发现配置注解扫描后,进行单元测试时报错,针对这种情况网上也是查找了好多资料,给的建议是:①把jdk的版本从1.8降为1.7或者1.6,②把spring.2.5.6的jar包换成高版本的包,经测试方法②不太靠谱,差不多把spring所有的jar包都加到环境变量里面,结果并没有什么用。我想实现的效果是不降低jdk的版本就用jdk1.8(因为sts要求jdk的最低版本是1.8),后来网上查找了一下资料,还真有解决方法,即把spring.2.5.6包中的JdkVersion修改一下,使其支持jdk1.8即可。

4、解决方法:

(1)新建包:org.springframework.core

(2)在该包下新建JdkVersion.java类

JdkVersion.java的源码信息如下:

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------

package org.springframework.core;

public abstract class JdkVersion {
    public static final int JAVA_13 = 0;
    public static final int JAVA_14 = 1;
    public static final int JAVA_15 = 2;
    public static final int JAVA_16 = 3;
    public static final int JAVA_17 = 4;

    public static final int JAVA_18 = 5;
    private static final String javaVersion = System
            .getProperty("java.version");
    private static final int majorJavaVersion;
    public static String getJavaVersion() {
        return javaVersion;
    }
    public static int getMajorJavaVersion() {
        return majorJavaVersion;
    }
    public static boolean isAtLeastJava14() {
        return true;
    }
    public static boolean isAtLeastJava15() {
        return getMajorJavaVersion() >= 2;
    }
    public static boolean isAtLeastJava16() {
        return getMajorJavaVersion() >= 3;
    }
    static {

        if (javaVersion.indexOf("1.8.") != -1) {
            majorJavaVersion = 5;
        }else if (javaVersion.indexOf("1.7.") != -1) {
            majorJavaVersion = 4;
        } else if (javaVersion.indexOf("1.6.") != -1) {
            majorJavaVersion = 3;
        } else if (javaVersion.indexOf("1.5.") != -1) {
            majorJavaVersion = 2;
        } else {
            majorJavaVersion = 1;
        }
    }
}

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------

(3)在项目的bin目录下找到编译后的JdkVersion .class文件,将其拷贝出来。

          说明:我做spring单元测试时,搭建的环境是普通Java工程,编译后的文件就在bin目录,项目结构如下:

(4)把spring.jar从lib包中拷出来,用360压缩或者其他压缩软件把其打开,找到JdkVersion.class文件所在的文件夹,然后把刚刚我们自己编译后的JdkVersion.class拷贝过来,把spring.jar中的JdkVersion.class覆盖掉,截图操作如下:

(5)把新的spring.jar引入到项目的环境变量中,再次进行测试就可以正常使用了。

后记:我是一个喜欢专研技术的人,喜欢尽量把问题的条理简单化,以便别人和自己能够很快的定位出问题的根源出现在哪里以及如何解决,喜欢我的朋友可以关注我以及在评论区进行留言评论,我会尽量在收到消息的第一时间解决各位的问题的。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值