文档章节

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

阿阮
 阿阮
发布于 2014/03/21 13:47
字数 253
阅读 6234
收藏 3

公司还用的是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;
        }
    }
}


© 著作权归作者所有

阿阮
粉丝 36
博文 11
码字总数 3987
作品 0
海淀
架构师
私信 提问
加载中

评论(19)

陈信贤001

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

替换JdkVersion.calss

引用来自“Big_Rotor”的评论

时间已经过的很久远了,不过还是要问下您 JdkVersion.class 您是怎么修改替换的呢,反编译发现不能修改呢。
再压缩为jar
陈信贤001

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

替换JdkVersion.calss

引用来自“Big_Rotor”的评论

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

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

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

引用来自“大饼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版本)就好了。
春三十娘

引用来自“jinhuer168”的评论

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

我个人还是感觉推荐大家选择JDK降级的办法,解决此问题,虽然楼主的方法也不错!
冒充者

引用来自“jinhuer168”的评论

我的是spring4.X,已经支持1.8的JDK了,但还是报这个错误,我是用的intellij
你的这个问题解决了吗?我和你是一样的情况
jinhuer168
jinhuer168
我的是spring4.X,已经支持1.8的JDK了,但还是报这个错误,我是用的intellij
@ResponseBody响应JSON 406

搭建SpringMVC(4.1),但是搭建完成以后发现使用@ResponseBody的ajax无法访问,总是出现406的问题。 首先怀疑的是配置问题,经过查明,影响SpringMVC的@ResponseBody注解的是: <mvc:annotat...

冷冷gg
2015/09/27
641
0
SpringMVC中AJAX请求出现406

这几天因为需要搭建SpringMVC,但是搭建完成以后发现使用@ResponseBody的ajax无法访问,总是出现406的问题。 首先怀疑的是配置问题,经过查明,影响SpringMVC的@ResponseBody注解的是: <mvc...

国士
2015/01/12
6K
1
eclipse 创建的maven项目debug出现Perhaps you are running on a JRE rather than a JDK?问题

我在打包maven项目的时候报了这个错 导致打包失败,百度了No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK 后上说是eclipse maven环境里没...

抱歉不知道
2017/11/07
67
0
IntelliJ IDEA 2018.1.2 发布,改进对 Spring Boot 的支持

IntelliJ IDEA 2018.1.2 已发布,这是 IntelliJ IDEA 2018.1 系列的第二次小更新。 针对 IntelliJ IDEA 2018.1 推出的新功能 partial Git commits ,新版本做了几个修复和完善: Fix for wr...

王练
2018/04/25
5.6K
29
Java面试中常问的Spring方面问题(含答案)

Spring Framework 现在几乎已成为 Java Web 开发的标配框架。那么,作为 Java 程序员,你对 Spring 的主要技术点又掌握了多少呢?不妨用本文的问题来检测一下。 1、一般问题 1.1. 不同版本的...

Java猫
01/15
0
0

没有更多内容

加载失败,请刷新页面

加载更多

shangcheng-my

1.数据库主键、外键类型为bigint,那么在后台应该用什么类型的变量定义? 后台用string接收,因为前段传过来的一般都是json字符串,后台直接接收,mysql是可以吧数字类型的字符串转换为对应的...

榴莲黑芝麻糊
昨天
1
0
微服务架构依赖图

基于spring-cloud-alibaba + dubbo

龙影
昨天
3
0
Centos7 安装zabbix-agent

rpm -i https://repo.zabbix.com/zabbix/4.2/rhel/6/x86_64/zabbix-release-4.2-2.el6.noarch.rpm 可以到https://repo.zabbix.com/zabbix找到对应的版本 yum install zabbix-agent -y 出现E......

abowu
昨天
8
0
文本编辑器GNU nano 4.4 发布

GNU nano 4.4 "Hagelslag" 更新日志: 启动时,光标可以放在第一个或最后一个出现位置 字符串前面带有+/string 或 +?string的字符串。 发生自动硬包装时((--breaklonglines),任何前导引号...

linuxCool
昨天
7
0
你知道字节序吗

字节序 最近在调一个自定义报文的接口时,本来以为挺简单的,发现踩了好几个坑,其中一个比较“刻骨铭心”的问题就是数据的字节序问题。 背景 自定义报文,调用接口,服务端报文解析失败 iO...

杭城小刘
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部