最近系统为了兼容springboot 项目,需升级jdk,为了避免风险暂时不进行spring升级,所以启动idea项目jdk1.8环境时,报jdk版本太低,开始郁闷明明环境使用的是1.8,怎么会报这个错误。后来查看spring2.5.6 版本,在进行获取xml元数据时,namsesapce处理类加载xml配置时会校验配置数据正确性,其中有一项是javaversion 检测,看下面源码:
我一般是在src文件夹加org.springframework.core包,并添加一个JdkVersion.java文件。使注解能够识别jdk8。
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 JdkVersion()
{
}
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;
}
public static boolean isAtLeastJava17()
{
return getMajorJavaVersion() >= 4;
}
public static boolean isAtLeastJava18()
{
return getMajorJavaVersion() >= 5;
}
static
{
// version String should look like "1.4.2_10"
if (javaVersion.contains("1.8.")) {
majorJavaVersion = JAVA_18;
System.out.println("JAVA_VERSION: "+javaVersion);
}
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;
}
}
由源码可以看到,并没有1.8的校验,所以问题出在这里,故可以得出一个结论,该版本与jdk1.8不兼容,找到问题思考解决方案:
1.升级spring 版本
2.降低jdk版本
3.重新编译spring jar包,这种有一定风险
4.改变扫描策略,使用xml方式配置类
在这里由于不能升级spring版本,故此使用4方案。