今天启动tomcat项目的时候,tomcat抛出了下面这个异常:

1
are only available on JDK 1.5 and higher

看源码是org.springframework.context.annotation.AnnotationConfigBeanDefinitionParser自动检测,jdk版本检测时需要jre1.5以上版本,但是JdkVersion只检查到了1.7,jre1.8 时不匹配任何jdk。

想要解决这个错误,一般有两种办法:

  1. 将jdk8换成jdk7,重新启动项目就好了。

  2. 第二种手动修改spring的jar包,在org.springframework.core目录下,有一个JdkVersion.class,自己参照包路径,重新写一个JdkVersion.java,如下所示(一般不推荐使用这种方式,可能会导致其他的问题):

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    
    package org.springframework.core;  
      
    public 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;  
        }  
    }  
    } 

写好之后,编译成.class文件,放到spring的jar包中,替换项目jar包,重新启动,就好了。