java.lang.IllegalStateException: Context namespace element ‘annotation-config’ and its parser class
專案中用的是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; } } }
我這裡只是添加了這個檔案,並沒有替換之前的spring.jar下的檔案,很神奇竟然也可以了。
因為我做的專案是比較早的,所以直接用的別人的jar包。有些版本不匹配。所以報的錯。我用的JDK的版本是1.8.應該換成1.7就OK了。
這個方式比較直接,比較好。
這些問題都可以百度得到。
3、到專案的WEB-INF/classes 下面找到對應的package中的JdkVersion.class檔案
4、將專案中的spring-core-2.5.6.jar拷貝出來開啟,然後將JdkVersion.class替換jar包中的該檔案。
5、將修改後的spring-core-2.5.6.jar再覆蓋到專案中。