spring (2.5, 3.2) 在 jre 1.8下的fix

原创
2014/03/21 13:47
阅读数 1.3W

公司还用的是spring低版本,今天用jre 8测试了一下,发现错误:
Unexpected exception parsing XML document from class path resource [applicationContext-dao.xml]; nested exception is java.lang.IllegalStateException: Context namespace element 'annotation-config' and its parser class [org.springframework.context.annotation.AnnotationConfigBeanDefinitionParser] are only available on JDK 1.5 and higher,看源码是org.springframework.context.annotation.AnnotationConfigBeanDefinitionParser自动检测,jdk版本检测时需要jre1.5以上版本,但是JdkVersion只检查到了1.7,jre1.8 时不匹配任何jdk, 修正如下,问题解决

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;
    //for jre 1.8
    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 {
        //for jre 1.8
        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;
        }
    }
}


展开阅读全文
打赏
2
3 收藏
分享
加载中

引用来自“陈信贤001”的评论

替换JdkVersion.calss

引用来自“Big_Rotor”的评论

时间已经过的很久远了,不过还是要问下您 JdkVersion.class 您是怎么修改替换的呢,反编译发现不能修改呢。
再压缩为jar
2018/04/26 12:51
回复
举报

引用来自“陈信贤001”的评论

替换JdkVersion.calss

引用来自“Big_Rotor”的评论

时间已经过的很久远了,不过还是要问下您 JdkVersion.class 您是怎么修改替换的呢,反编译发现不能修改呢。
把这个文件解压spring-core-版本号.jar,把修改并编译好的JdkVersion.class复制到相应目录
2018/04/26 12:50
回复
举报

引用来自“陈信贤001”的评论

替换JdkVersion.calss
时间已经过的很久远了,不过还是要问下您 JdkVersion.class 您是怎么修改替换的呢,反编译发现不能修改呢。
2018/04/25 17:20
回复
举报
我也遇到了同样的问题,答主的方法我不知道怎么弄,不过我根据楼上@大饼69221讲的第二种方法试了一下,降低jdk的版本并不行,我是由原来的jdk1.8降到了1.7。最后我是下载了更高版本的spring(4.0.5版本)就好了,以前的spring版本是2.5。
2017/08/02 16:14
回复
举报

引用来自“大饼69221”的评论

楼主太牛了,给你一个大大的赞!!!
总结了一下,出现这种问题,一共有两种解决办法:
1) 第一种:使用楼主推荐的方法,在web工程中找到 spring.jar,修改内容并替换org.springframework.core.JdkVersion.class 文件;
2) 第二种:JDK降级,将JDK1.8 降到 JDK1.7;

我个人还是感觉推荐大家选择JDK降级的办法,解决此问题,虽然楼主的方法也不错!
我试过降级,由jdk1.8降到1.7还是没有用。我最后是用了更高版本的spring(4.0.5版本)就好了。
2017/08/02 16:09
回复
举报

引用来自“jinhuer168”的评论

我的是spring4.X,已经支持1.8的JDK了,但还是报这个错误,我是用的intellij
你把jdk的版本改为1.7的就好了。
2017/08/02 16:01
回复
举报
谢谢,已解决
2016/03/14 15:02
回复
举报
楼主太牛了,给你一个大大的赞!!!
总结了一下,出现这种问题,一共有两种解决办法:
1) 第一种:使用楼主推荐的方法,在web工程中找到 spring.jar,修改内容并替换org.springframework.core.JdkVersion.class 文件;
2) 第二种:JDK降级,将JDK1.8 降到 JDK1.7;

我个人还是感觉推荐大家选择JDK降级的办法,解决此问题,虽然楼主的方法也不错!
2016/03/02 15:47
回复
举报

引用来自“jinhuer168”的评论

我的是spring4.X,已经支持1.8的JDK了,但还是报这个错误,我是用的intellij
你的这个问题解决了吗?我和你是一样的情况
2015/09/02 16:49
回复
举报
我的是spring4.X,已经支持1.8的JDK了,但还是报这个错误,我是用的intellij
2015/08/29 22:25
回复
举报
更多评论
打赏
19 评论
3 收藏
2
分享
返回顶部
顶部