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引入到项目的环境变量中,再次进行测试就可以正常使用了。
后记:我是一个喜欢专研技术的人,喜欢尽量把问题的条理简单化,以便别人和自己能够很快的定位出问题的根源出现在哪里以及如何解决,喜欢我的朋友可以关注我以及在评论区进行留言评论,我会尽量在收到消息的第一时间解决各位的问题的。