2016-09-27 3 views
5

Wenn ein sehr grundlegenden Frühling App läuft und eine Bean-Fabrik mit FileSystemXmlApplicationContext Schaffung, begegne mir ein NoSuchMethodError.NoSuchMethodError zum Kompilieren Frühlings-Anwendung mit FileSystemXmlApplicationContext

Die beans.xml Datei ist die Wurzel der App mit pom.xml und sieht wie folgt aus:

<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> 

Die Person-Klasse wie folgt aussieht:

package com.xyz.practice; 

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

Und der Haupt Klasse App.java sieht wie folgt aus:

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(); 
    } 

} 

Beim Ausführen der App wird folgende Ausnahme ausgelöst:

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

Dies ist fast sicher aufgrund einer Versionskonflikt zwischen der Frühlings-Bibliothek, die Sie während der Kompilierung verwendet und die Version auf dem Server bereitgestellt. Die Version in Ihrem Entwicklungssystem enthält diese Methode und die implementierte Version nicht. –

+0

Können Sie die pom.xml posten? Scheint so, als ob du verschiedene Versionen des Spring-Frameworks mischst. –

+0

@JimGarrison Details meiner Abhängigkeiten: http://pastebin.com/fCSkuSwS –

Antwort

2

Sie haben inkompatible JAR-Dateien in Ihrem Klassenpfad. Überprüfen Sie die Version von spring-context-support und spring-beans Das fehlende Verfahren im Frühjahr eingeführt wurde 4.2:

Leere clearMetadataCache()

Löschen der fusionierten Bean Definition Cache, Entfernen von Einträgen für Bohnen , die nicht für voll förderfähig gelten als Metadaten-Caching noch. Wird normalerweise nach Änderungen an den ursprünglichen Bean-Definitionen ausgelöst, z. B. , z. nach dem BeanFactoryPostProcessor. Beachten Sie, dass Metadaten für Beans, die bereits an dieser Stelle erstellt wurden, beibehalten werden.

seit: 4.2

Siehe auch: getBeanDefinition (java.lang.String), ConfigurableBeanFactory.getMergedBeanDefinition (java.lang.String)

Überprüfen Sie, ob Version von spring-context-support die gleiche ist dann spring-beans

By the way: die Version am Ende des XSD-Standort entfernen:

http://www.springframework.org/schema/beans/spring-beans.xsd"> 
+1

Danke Mann, es hat funktioniert. Der Versions-Frühlingskontext stimmte nicht mit den Frühlingsbohnen überein, die 4.1.1.RELEASE waren. Ich änderte die Abhängigkeit vom Frühjahrskontext zur selben Version und es funktionierte. Danke vielmals. –

1

Dies liegt an der Versionskonflikt zwischen der Spring liberary.

void clearMetadataCache() Methode wird in ConfigurableListableBeanFactory since 4.2.0 version release hinzugefügt. Also, wenn Sie spring-beans Bibliothek Version less than 4.2.0 versions verwenden, erhalten Sie wahrscheinlich diese Art von Ausnahme Exception in thread "main" java.lang.NoSuchMethodError: org.springframework.beans.factory.config.ConfigurableListableBeanFactory.clearMetadataCache()V.

Versuchen Sie also, die richtige Version von jar in lib hinzuzufügen.

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

Für weitere Informationen können Sie diese URL verweisen: https://abi-laboratory.pro/java/tracker/compat_report/spring-framework/4.1.9/4.2.0/e1bb7/src_compat_report.html#Added

+1

danke, habe mein Problem gelöst. –

+0

Okie, Sie sind willkommen. –

2

Du Mischen verschiedener Versionen in pom.xml (feder core.jar und feder beans.jar). Bitte korrigieren Sie es wie folgt.

Vorher:

<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> 

Nach:

<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

half es. Vielen Dank S. Basnagoda –