2016-09-27 4 views
5

При выполнении очень простой Spring приложение и создания Bean Factory с FileSystemXmlApplicationContext, я сталкиваюсь с NoSuchMethodError.NoSuchMethodError по составлению Spring Application с 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> 

Класс Person выглядит следующим образом:

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

Это почти наверняка из-за несоответствия между версиями библиотеки Spring, который вы использовали при компиляции и версия развернутого на сервере. Версия в вашей системе разработки содержит этот метод, а развернутая версия - нет. –

+0

Можете ли вы опубликовать pom.xml? Похоже, вы смешиваете разные версии Spring framework. –

+0

@JimGarrison Информация о моих зависимостях: http://pastebin.com/fCSkuSwS –

ответ

2

У вас есть несовместимые файлы jar в вашем пути к классам. Проверьте версию spring-context-support и spring-beans недостающее метод был введен весной 4.2:

аннулируются clearMetadataCache()

Очистить кэш объединенном определения боб, удаление записей для фасоли , которые не считаются полноправными кеширование метаданных. Обычно запускается после внесения изменений в исходные определения бобов, , например. после применения BeanFactoryPostProcessor. Обратите внимание, что метаданные для beans, которые были созданы в этот момент, будут храниться в .

С: 4,2

Смотрите также: getBeanDefinition (java.lang.String), ConfigurableBeanFactory.getMergedBeanDefinition (java.lang.String)

Проверьте версию spring-context-support то же самое, то spring-beans

Кстати: удалить версию в конце XSD Адрес:

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

Спасибо, человек, это сработало. Весна-контекст версии несовместим с весенними фасолью, которая была 4.1.1.RELEASE. Я изменил зависимость Spring-context к той же версии, и она сработала. Благодаря тонну. –

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.

Итак, попробуйте добавить правильную версию jar в 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

okie, добро пожаловать. –

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

это помогло. большое спасибо С.Баснагоде –

Смежные вопросы