0

spring 4.1.0.RELEASE を使用して作成された Spring MVC アプリがあります。構成クラスとしてマークするために @Configuration でマークされた A というクラスがあります。

アプリケーション コンテキストの XML 構成は次のとおりです。

<bean id="a" class="A"></bean>

アプリケーションは、次のエラーで起動に失敗しています。私はjetty 8プラグインでEclipseを使用しています。

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'a' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Initialization of bean failed; nested exception is java.lang.NoSuchMethodError: A(class name)(Lorg/springframework/beans/factory/BeanFactory;)V
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:548)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:229)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:370)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1113)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1008)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.getSingletonFactoryBeanForTypeCheck(AbstractAutowireCapableBeanFactory.java:861)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.getTypeForFactoryBean(AbstractAutowireCapableBeanFactory.java:791)
at org.springframework.beans.factory.support.AbstractBeanFactory.isTypeMatch(AbstractBeanFactory.java:541)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doGetBeanNamesForType(DefaultListableBeanFactory.java:406)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanNamesForType(DefaultListableBeanFactory.java:381)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:485)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:478)
at org.springframework.context.support.AbstractApplicationContext.getBeansOfType(AbstractApplicationContext.java:1052)
at org.springframework.amqp.rabbit.core.RabbitAdmin.initialize(RabbitAdmin.java:356)
at org.springframework.amqp.rabbit.core.RabbitAdmin$11.onCreate(RabbitAdmin.java:323)
at org.springframework.amqp.rabbit.connection.CompositeConnectionListener.onCreate(CompositeConnectionListener.java:32)
at org.springframework.amqp.rabbit.connection.CachingConnectionFactory.createConnection(CachingConnectionFactory.java:373)
at org.springframework.amqp.rabbit.connection.ConnectionFactoryUtils$1.createConnection(ConnectionFactoryUtils.java:80)
at org.springframework.amqp.rabbit.connection.ConnectionFactoryUtils.doGetTransactionalResourceHolder(ConnectionFactoryUtils.java:130)
at org.springframework.amqp.rabbit.connection.ConnectionFactoryUtils.getTransactionalResourceHolder(ConnectionFactoryUtils.java:67)
at org.springframework.amqp.rabbit.listener.BlockingQueueConsumer.start(BlockingQueueConsumer.java:365)
at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer$AsyncMessageProcessingConsumer.run(SimpleMessageListenerContainer.java:1009)
at java.lang.Thread.run(Thread.java:745)

奇妙な点は、私のチーム メイトのシステムではアプリケーションが正常に動作するのに、私のシステムでは動作しないことです。

どんな助けでも大歓迎です。

4

1 に答える 1

0

読み込まれた jar に何らかの問題がある場合、java.lang.NoSuchMethodError が発生します。このコードを実行しようとしているマシンで、古いバージョンのjarをロードしているパスにCLASSPATHが設定されていると思います。

  1. 下位バージョンの Spring jar が共有フォルダーまたはクラス パスに存在する可能性があります。

  2. Maven プロジェクトの場合は、mvn dependency:tree を実行し、他の依存関係が Spring の下位バージョンをロードしていることを確認します。

  3. アプリケーションにロードされたすべての jar のパスを確認できます。

public static void main(String[] args) {

URLClassLoader classLoader = (URLClassLoader)CurrentClass.class.getClassLoader(); System.out.println(Arrays.toString(classLoader.getURLs()));

}

于 2016-09-13T12:08:40.913 に答える