2016-09-27 12 views
5

साथ वसंत आवेदन संकलन जब एक बहुत ही बुनियादी स्प्रिंग एप्लिकेशन चल रहा है और के साथ एक बीन फैक्टरी बनाने FileSystemXmlApplicationContext पर, मैं एक NoSuchMethodError मुठभेड़।NoSuchMethodError FileSystemXmlApplicationContext

beans.xml फ़ाइल pom.xml साथ एप्लिकेशन की जड़ में है और इस तरह दिखता है:

<beans xmlns="http://www.springframework.org/schema/beans" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd"> 

<bean id="person" class="com.xyz.practice.Person"> 

</bean> 

</beans> 

व्यक्ति वर्ग लगता है:

package com.xyz.practice; 

public class Person { 
    public void speak(){ 
     System.out.println("Hello I'm a Person"); 
    } 
} 

और मुख्य कक्षा App.java निम्न जैसा दिखता है:

package com.xyz.practice; 

import org.springframework.context.ApplicationContext; 
import org.springframework.context.support.FileSystemXmlApplicationContext; 

public class App { 

    public static void main(String[] args) { 
     ApplicationContext context = new FileSystemXmlApplicationContext("beans.xml"); 
     Person person = (Person) context.getBean("person"); 
     person.speak(); 
    } 

} 

चलाते समय ऐप, निम्नलिखित अपवाद फेंक दिया गया है:

INFO: Loading XML bean definitions from file [/home/salmank/Documents/springWithAbc/beans.xml] 
Exception in thread "main" java.lang.NoSuchMethodError: org.springframework.beans.factory.config.ConfigurableListableBeanFactory.clearMetadataCache()V 
    at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:185) 
    at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:678) 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:520) 
    at org.springframework.context.support.FileSystemXmlApplicationContext.<init>(FileSystemXmlApplicationContext.java:140) 
    at org.springframework.context.support.FileSystemXmlApplicationContext.<init>(FileSystemXmlApplicationContext.java:84) 
    at com.xyz.practice.App.main(App.java:9) 
+0

यह वसंत पुस्तकालय आप संकलन के दौरान इस्तेमाल किया और संस्करण सर्वर पर तैनात बीच एक संस्करण बेमेल की वजह से लगभग निश्चित रूप से है। आपके विकास प्रणाली में संस्करण में यह तरीका है और तैनाती संस्करण नहीं है। –

+0

क्या आप pom.xml पोस्ट कर सकते हैं? ऐसा लगता है कि आप वसंत ढांचे के विभिन्न संस्करणों को मिश्रित कर रहे हैं। –

+0

@JimGarrison मेरी निर्भरताओं का विवरण: http://pastebin.com/fCSkuSwS –

उत्तर

2

आपके क्लासपाथ में असंगत जार फ़ाइलें हैं। spring-context-support और spring-beans के संस्करण की जाँच करें लापता विधि वसंत 4.2 में पेश किया गया:

शून्य clearMetadataCache() मर्ज किए गए सेम परिभाषा कैश

साफ़, सेम जो पूर्ण के लिए पात्र नहीं माना जाता है के लिए प्रविष्टियां निकालने मेटाडेटा कैशिंग अभी तक। मूल बीन परिभाषाओं में परिवर्तन के बाद आमतौर पर ट्रिगर किया गया, उदा। एक BeanFactoryPostProcessor लागू करने के बाद। ध्यान दें कि बीन्स जो मेटाडाटा पहले से ही इस बिंदु पर बनाए गए हैं, को रखा जाएगा।

के बाद से: 4.2

भी देखें: getBeanDefinition (java.lang.String), ConfigurableBeanFactory.getMergedBeanDefinition (java.lang.String)

चेक अगर spring-context-support के संस्करण एक ही तो spring-beans है

वैसे:

http://www.springframework.org/schema/beans/spring-beans.xsd"> 
: XSD स्थान के अंत में संस्करण को दूर
+1

धन्यवाद आदमी, यह काम किया। संस्करण वसंत-संदर्भ वसंत-सेम के साथ मेल नहीं खा रहा था जो 4.1.1 था। RELEASE। मैंने वसंत-संदर्भ निर्भरता को उसी संस्करण में बदल दिया और यह काम किया। अनेक अनेक धन्यवाद। –

1

यह वसंत उदारवादी के बीच संस्करण विसंगति के कारण है।

void clearMetadataCache() विधि ConfigurableListableBeanFactory since 4.2.0 version release में जोड़ा गया है। तो यदि आप spring-beans लाइब्रेरी संस्करण less than 4.2.0 versions का उपयोग कर रहे हैं, तो आपको शायद यह Exception in thread "main" java.lang.NoSuchMethodError: org.springframework.beans.factory.config.ConfigurableListableBeanFactory.clearMetadataCache()V अपवाद प्राप्त होगा।

तो, उचित संस्करण जार को lib में जोड़ने का प्रयास करें।

Added Methods :: 
    spring-beans-4.2.0.RELEASE.jar, 
    ConfigurableListableBeanFactory.class 
    package org.springframework.beans.factory.config 
    ConfigurableListableBeanFactory.clearMetadataCache () [abstract] : void 

अधिक जानकारी के लिए आप भी इस URL उल्लेख कर सकते हैं: https://abi-laboratory.pro/java/tracker/compat_report/spring-framework/4.1.9/4.2.0/e1bb7/src_compat_report.html#Added

+1

धन्यवाद, मेरी समस्या हल हो गई। –

+0

ठीक है, आपका स्वागत है। –

2

आप विभिन्न संस्करणों को एक साथ मिश्रण कर रहे हैं pom.xml (वसंत-core.jar और वसंत-beans.jar) में। कृपया इसे निम्नलिखित के रूप में सही करें।

से पहले:

<dependency> 
    <groupId>org.springframework</groupId> 
    <artifactId>spring-core</artifactId> 
    <version>4.2.5.RELEASE</version> 
</dependency> 
<dependency> 
    <groupId>org.springframework</groupId> 
    <artifactId>spring-beans</artifactId> 
    <version>4.1.1.RELEASE</version> 
</dependency> 

के बाद:

<dependency> 
    <groupId>org.springframework</groupId> 
    <artifactId>spring-core</artifactId> 
    <version>4.2.5.RELEASE</version> 
</dependency> 
<dependency> 
    <groupId>org.springframework</groupId> 
    <artifactId>spring-beans</artifactId> 
    <version>4.2.5.RELEASE</version> 
</dependency> 
+0

इससे मदद मिली। बहुत धन्यवाद एस। बेसनागोडा –

संबंधित मुद्दे