…… are only available on JDK 1.5 and higher 错误(spring 的jdk版本检测在jdk 8下的修订)

项目中用的是spring低版本(2.5.6),今天用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,按如下方法处理,可以解决问题。

1、在项目中创建一个package为org.springframework.core
2、在该package下面新建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;
    //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;
        }
    }
}

3、到项目的WEB-INF/classes 下面找到对应的package中的JdkVersion.class文件
4、将项目中的spring-core-2.5.6.jar拷贝出来打开,然后将JdkVersion.class替换jar包中的该文件。
5、将修改后的spring-core-2.5.6.jar再覆盖到项目中。

这样,再启动项目就不会出现错误了。

时间: 2024-10-26 20:08:58

…… are only available on JDK 1.5 and higher 错误(spring 的jdk版本检测在jdk 8下的修订)的相关文章

spring入门(13) JDK动态代理

首先我们来了解一下java中的代理模式,代理模式的英文叫做Proxy或Surrogate,中文都可译为"代理",所谓代理,就 是一个人或者一个机构代表另一个人或者另一个机构采取行动.在一些情况下,一个客户不想或者不能够直接引用一个对象 ,而代理对象可以在客户端和目标对象之间起到中介的作用. 1.抽象主题角色 声明了真实主题和代理主题 的共同接口,这样一来在任何可以使用真实主题的地方都可以是使用代理主题 2.代理主题(Proxy)角色: 代理主题角色内部含有对真实主题的引用,从而可以在任

作spring , j2ee的话,open jdk和oracle jdk 有区别么?推荐

问题描述 作spring,j2ee的话,openjdk和oraclejdk有区别么?推荐哪个? 解决方案 解决方案二:openjdk是sun2006年开放的jdk的源码项目oraclejdk采用了商业实现,包含一些openjdk没有的商业闭源功能普通开发应用,用oraclejdk就可以了如果研究jvm,想通过改写源码提高jdk性能的话,那就拿openjdk开刀吧.

Linux_CentOS-服务器搭建 <三> 补充

今天 才发现,服务器上 JDK 都没有好好的安装下.在这里补充说下. 1.看看机子上JDK的安装了多少 $ rpm -qa |grep java 会出现类似: java-1.6.0-openjdk-1.6.0.0-1.61.1.11.11.el6_4.x86_64 java-1.7.0-openjdk-1.7.0.19-2.3.9.1.el6_4.x86_64 //这些都是版本的罗列   机子上既然有 ,我们先把他们卸载了. 用putty 连接是 (有个好处 ,今天刚刚发现,就是复制,选中下打过

JDK、JRE和JVM的区别与联系

很多朋友可能跟我一样,已经使用JAVA开发很久了,可是对JDK,JRE,JVM这三者的联系与区别,一直都是模模糊糊的. 今天特写此文,来整理下三者的关系. JDK : Java Development ToolKit(Java开发工具包).JDK是整个JAVA的核心,包括了Java运行环境(Java Runtime Envirnment),一堆Java工具(javac/java/jdb等)和Java基础的类库(即Java API 包括rt.jar). 最主流的JDK是Sun公司发布的JDK,除了

jdk环境变量配置

进行java开发,首先要安装jdk,安装了jdk后还要进行环境变量配置: 1.下载jdk(http://java.sun.com/javase/downloads/index.jsp),我下载的版本是:jdk-6u14-windows-i586.exe 2.安装jdk-6u14-windows-i586.exe 3.配置环境变量:右击"我的电脑"-->"高级"-->"环境变量" 1)在系统变量里新建JAVA_HOME变量,变量值为:C

在SuSE 10.2下安装JDK环境

如果只是安装JRE环境的话,可以通过SuSE的YaST直接安装.打开YaST,输入java,查找,在查找结果窗口选择最新的java版本,安装即可. 下面说说怎么样安装JDK环境. JDK下载 首先可以从下面的联结下载最新的JDK版本: http://java.sun.com/javase/downloads/index.jsp 现在linux的版本是jdk-6u1-linux-i586.bin 或jdk-6u1-linux-i586-rpm.bin 可以选择其中的任何一个下载. 安装 1,把下载

如何在Linux中安装JDK?

在Linux中安装JDK,过程如下: 1. 先从网上下载jdk,下载后放在/home目录中,当然其它地方也行. 进入安装目录 #cd /home #cp jdk-1_6_0_03-linux-i586.rpm /usr/local #cd /usr/local 给所有用户添加可执行的权限 #chmod +x jdk-1_6_0_03-linux-i586.rpm.bin #./jdk-1_6_0_03-linux-i586.rpm.bin 此时会生成文件jdk-1_5_0_02-linux-i5

新手学Linux(一)----安装JDK

JDK包 安装过程 检测是否已经安装JDK 卸载系统自带jdk 获取文件权限 安装JDK 移动安装目录 配置环境变量 检测配置是否成功 JDK包     安装jdk,首先你要有安装包,去网上下载一个Linux版本的rpm包,在我的电脑上用的是jdk-8u65-linux-x64.rpm包.链接: http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 安装过程 检测是否已经安装JDK

Java 9的JDK中值得期待的:不仅是模块化

[译者注]在本文中,作者介绍了即将在9.21发布的Java 9新特性,除了最重要的模块化以外,还涉及到编译,工具,协议,缓存等新特点,也提及了在此次版本中移除的功能,供Java爱好者阅读和参考. 以下为译文: 在多次延期后,Java 9将于9月21日以Java开发工具包9的形式出现,这是自2014年3月以来,Java标准版的第一次重大升级.官方列出了JDK 9的大约90个新特性,模块化是最主要的一个.将Java重新配置成模块化格式,这项任务已经持续了多年,但在编译.代码缓存和JavaScript