spring 2.5.6 錯誤:Context namespace element 'component-scan' and its parser class [org.springframework.context.annotation.ComponentScanBeanDefinitionParser] are only available on JDK 1.5 and higher


在運行一個第三方公司交付的項目的時候, 出現:

Caused by: 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
    at org.springframework.context.config.ContextNamespaceHandler$1.parse(ContextNamespaceHandler.java:65)
    at org.springframework.beans.factory.xml.NamespaceHandlerSupport.parse(NamespaceHandlerSupport.java:69)
    at 

 

憑感覺,這是jdk版本問題。 我本機安裝的是1.8, 對方要求的也是1.8. 他們運行沒問題,我這里怎么就不行了呢? 這就奇怪了。。

跟進源碼里面看看吧: org.springframework.context.config.ContextNamespaceHandler$1.parse(ContextNamespaceHandler.java:65)

 

private void registerJava5DependentParser(final String elementName, final String parserClassName) {
BeanDefinitionParser parser = null;
if(JdkVersion.isAtLeastJava15()) {
try {
Class parserClass = ClassUtils.forName(parserClassName, ContextNamespaceHandler.class.getClassLoader());
parser = (BeanDefinitionParser)parserClass.newInstance();
} catch (Throwable var5) {
throw new IllegalStateException("Unable to create Java 1.5 dependent parser: " + parserClassName, var5);
}
} else {
parser = new BeanDefinitionParser() {
public BeanDefinition parse(Element element, ParserContext parserContext) {
throw new IllegalStateException("Context namespace element '" + elementName + "' and its parser class [" + parserClassName + "] are only available on JDK 1.5 and higher");
}
};
}

很明顯是JdkVersion.isAtLeastJava15() 有蹊蹺: 

    public static boolean isAtLeastJava15() {
        return getMajorJavaVersion() >= 2;
    }

最后找到:

    static {
        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(2.5.6) 只能支持到 1.7, 估計當時1.8 沒有出來(什么年代了還用2.5.6,真是奇葩啊)。怎么辦呢?需要重新安裝一個低版本的jdk啊

另外注意到:

private static final String javaVersion = System.getProperty("java.version");

 

還需要,修改 java的 環境變量,不然還是不生效。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM