2016-09-27 18 views
5

Podczas pracy bardzo prosty wiosna aplikację i stworzenie Bean fabryka FileSystemXmlApplicationContext, spotykam NoSuchMethodError.NoSuchMethodError na kompilacji Wiosna aplikacji z FileSystemXmlApplicationContext

Plik beans.xml jest w katalogu głównym aplikacji z pom.xml i wygląda następująco:

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

Klasa Osoba wygląda następująco:

package com.xyz.practice; 

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

a głównym Klasa App.java wygląda następująco:

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

} 

Podczas uruchamiania app, następujące jest wyjątek:

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

To prawie na pewno z powodu niedopasowania wersji między biblioteką wiosennym użytego podczas kompilacji i wersji wdrożonej na serwerze. Wersja w systemie deweloperskim zawiera tę metodę, a wersja wdrożona nie. –

+0

Czy możesz zamieścić plik pom.xml? Wygląda na to, że mieszasz różne wersje frameworka Spring. –

+0

@JimGarrison Szczegóły moich zależności: http://pastebin.com/fCSkuSwS –

Odpowiedz

2

Masz niekompatybilne pliki jar w ścieżce klas. Sprawdź wersję spring-context-support i spring-beans Brakujące metoda została wprowadzona wiosną 4.2:

void clearMetadataCache()

Jasne połączonego cache definicji fasoli, usuwając wpisy dla ziaren , które nie są uznawane za kwalifikujące się do pełnego buforowanie metadanych. Zazwyczaj wyzwalane po zmianach w pierwotnych definicjach fasoli, np. np. po zastosowaniu BeanFactoryPostProcessor. Zauważ, że metadane dla fasoli , które zostały już utworzone w tym momencie, zostaną zachowane wokół.

od: 4,2

Zobacz także: getBeanDefinition (java.lang.String) ConfigurableBeanFactory.getMergedBeanDefinition (java.lang.String)

Sprawdź, czy wersja spring-context-support jest taka sama, wtedy spring-beans

przy okazji: usunąć Wersja na koniec xsd Lokalizacja:

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

Dzięki człowieku, zadziałało. Wiosenny kontekst wersji był niedopasowany fasolką wiosenną, która była 4.1.1.RELEASE. Zmieniłem zależność kontekstu sprężynowego na tę samą wersję i zadziałało. Dzięki za tonę. –

1

Wynika to z niedopasowania wersji między wiosennym liberałem.

void clearMetadataCache() Metoda jest dodawana do ConfigurableListableBeanFactory since 4.2.0 version release. Więc jeśli używasz biblioteki spring-beans wersja less than 4.2.0 versions, prawdopodobnie otrzymasz ten Exception in thread "main" java.lang.NoSuchMethodError: org.springframework.beans.factory.config.ConfigurableListableBeanFactory.clearMetadataCache()V rodzaj wyjątku.

Spróbuj więc dodać odpowiednią wersję jar do lib.

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

Więcej szczegółów można odnieść ten URL też: https://abi-laboratory.pro/java/tracker/compat_report/spring-framework/4.1.9/4.2.0/e1bb7/src_compat_report.html#Added

+1

dziękuję, ale mój problem został rozwiązany. –

+0

okie, nie ma za co. –

2

Jesteś mieszanie różnych wersjach razem w pom.xml (wiosna-core.jar i wiosenno-beans.jar). Popraw to w następujący sposób.

Przed:

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

Po:

<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

to pomogło. bardzo dziękuję S.Basnagoda –