最新のSpringフレームワークバージョン(3.2.2-RELEASE)を使用してJava Webプロジェクトを開発していますが、プロジェクトの起動時に問題が発生しました。詳細エラーは
Java.lang.IncompatibleClassChangeError:
class org.springframework.core.type.classreading.ClassMetadataReadingVisitorには、スーパークラスとしてorg.springframework.asm.ClassVisitorインターフェースがあります。
私はこの問題をインターネットとこのサイトで調査し、いくつかの手がかりを得ました。プロジェクトからasmおよびspring-asmライブラリを削除しましたが、機能しませんでした。デフォルトのJREのrt.jarで定義されている別のClassVisitorインターフェイスがあることがわかります。これがこの競合の原因ですか?
しかし、私はそれを認めました:
class ClassMetadataReadingVisitor extends ClassVisitor implements ClassMetadata {
private String className;
....
}
ClassMetadataReadingVisitor
はclass org.springframework.asm.ClassVisitor
(spring-coreパッケージですでに利用可能)を参照しているので、JREのcom.Sun.xml.internal.ws.org.objectweb.asm.ClassVisitor
インターフェースとどのように競合しますか?これがどのように起こるのか分かりませんか?
完全なスタックトレースは次のとおりです。
[ERROR 13:49:39] (ContextLoader:319) - Context initialization failed
org.springframework.beans.factory.BeanDefinitionStoreException: Failed to read candidate component class: file [D:\workspace\.projects\myproject\trunk\target\myproject\WEB-INF\classes\com\myproject\action\AuthenticationAction.class]; nested exception is Java.lang.IncompatibleClassChangeError: class org.springframework.core.type.classreading.ClassMetadataReadingVisitor has interface org.springframework.asm.ClassVisitor as super class
at org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider.findCandidateComponents(ClassPathScanningCandidateComponentProvider.Java:281)
at org.springframework.context.annotation.ClassPathBeanDefinitionScanner.doScan(ClassPathBeanDefinitionScanner.Java:242)
at org.springframework.context.annotation.ComponentScanBeanDefinitionParser.parse(ComponentScanBeanDefinitionParser.Java:84)
at org.springframework.beans.factory.xml.NamespaceHandlerSupport.parse(NamespaceHandlerSupport.Java:73)
at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.Java:1438)
at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.Java:1428)
at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseBeanDefinitions(DefaultBeanDefinitionDocumentReader.Java:185)
at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.doRegisterBeanDefinitions(DefaultBeanDefinitionDocumentReader.Java:139)
at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.registerBeanDefinitions(DefaultBeanDefinitionDocumentReader.Java:108)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.registerBeanDefinitions(XmlBeanDefinitionReader.Java:493)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.Java:390)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.Java:334)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.Java:302)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.Java:174)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.Java:209)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.Java:180)
at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.Java:125)
at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.Java:94)
at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.Java:130)
at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.Java:537)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.Java:451)
at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.Java:389)
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.Java:294)
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.Java:112)
at org.Apache.catalina.core.StandardContext.listenerStart(StandardContext.Java:4205)
at org.Apache.catalina.core.StandardContext.start(StandardContext.Java:4704)
at org.Apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.Java:799)
at org.Apache.catalina.core.ContainerBase.addChild(ContainerBase.Java:779)
at org.Apache.catalina.core.StandardHost.addChild(StandardHost.Java:601)
at org.Apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.Java:675)
at org.Apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.Java:601)
at org.Apache.catalina.startup.HostConfig.deployApps(HostConfig.Java:502)
at org.Apache.catalina.startup.HostConfig.start(HostConfig.Java:1315)
at org.Apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.Java:324)
at org.Apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.Java:142)
at org.Apache.catalina.core.ContainerBase.start(ContainerBase.Java:1061)
at org.Apache.catalina.core.StandardHost.start(StandardHost.Java:840)
at org.Apache.catalina.core.ContainerBase.start(ContainerBase.Java:1053)
at org.Apache.catalina.core.StandardEngine.start(StandardEngine.Java:463)
at org.Apache.catalina.core.StandardService.start(StandardService.Java:525)
at org.Apache.catalina.core.StandardServer.start(StandardServer.Java:754)
at org.Apache.catalina.startup.Catalina.start(Catalina.Java:595)
at Sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at Sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at Sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at Java.lang.reflect.Method.invoke(Unknown Source)
at org.Apache.catalina.startup.Bootstrap.start(Bootstrap.Java:289)
at org.Apache.catalina.startup.Bootstrap.main(Bootstrap.Java:414)
Caused by: Java.lang.IncompatibleClassChangeError: class org.springframework.core.type.classreading.ClassMetadataReadingVisitor has interface org.springframework.asm.ClassVisitor as super class
at Java.lang.ClassLoader.defineClass1(Native Method)
at Java.lang.ClassLoader.defineClass(Unknown Source)
at Java.security.SecureClassLoader.defineClass(Unknown Source)
at org.Apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.Java:2818)
at org.Apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.Java:1159)
at org.Apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.Java:1647)
at org.Apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.Java:1526)
at Java.lang.ClassLoader.defineClass1(Native Method)
at Java.lang.ClassLoader.defineClass(Unknown Source)
at Java.security.SecureClassLoader.defineClass(Unknown Source)
at org.Apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.Java:2818)
at org.Apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.Java:1159)
at org.Apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.Java:1647)
at org.Apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.Java:1526)
at org.springframework.core.type.classreading.SimpleMetadataReader.<init>(SimpleMetadataReader.Java:63)
at org.springframework.core.type.classreading.SimpleMetadataReaderFactory.getMetadataReader(SimpleMetadataReaderFactory.Java:80)
at org.springframework.core.type.classreading.CachingMetadataReaderFactory.getMetadataReader(CachingMetadataReaderFactory.Java:102)
at org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider.findCandidateComponents(ClassPathScanningCandidateComponentProvider.Java:257)
... 47 more
[ERROR 13:49:39] (ContextLoader:319) - Context initialization failed
org.springframework.beans.factory.BeanDefinitionStoreException: Failed to read candidate component class: file [D:\workspace\.projects\myproject\trunk\target\myproject\WEB-INF\classes\com\myproject\action\AuthenticationAction.class]; nested exception is Java.lang.IncompatibleClassChangeError: class org.springframework.core.type.classreading.ClassMetadataReadingVisitor has interface org.springframework.asm.ClassVisitor as super class
at org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider.findCandidateComponents(ClassPathScanningCandidateComponentProvider.Java:281)
at org.springframework.context.annotation.ClassPathBeanDefinitionScanner.doScan(ClassPathBeanDefinitionScanner.Java:242)
at org.springframework.context.annotation.ComponentScanBeanDefinitionParser.parse(ComponentScanBeanDefinitionParser.Java:84)
at org.springframework.beans.factory.xml.NamespaceHandlerSupport.parse(NamespaceHandlerSupport.Java:73)
at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.Java:1438)
at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.Java:1428)
at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseBeanDefinitions(DefaultBeanDefinitionDocumentReader.Java:185)
at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.doRegisterBeanDefinitions(DefaultBeanDefinitionDocumentReader.Java:139)
at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.registerBeanDefinitions(DefaultBeanDefinitionDocumentReader.Java:108)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.registerBeanDefinitions(XmlBeanDefinitionReader.Java:493)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.Java:390)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.Java:334)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.Java:302)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.Java:174)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.Java:209)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.Java:180)
at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.Java:125)
at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.Java:94)
at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.Java:130)
at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.Java:537)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.Java:451)
at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.Java:389)
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.Java:294)
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.Java:112)
at org.Apache.catalina.core.StandardContext.listenerStart(StandardContext.Java:4205)
at org.Apache.catalina.core.StandardContext.start(StandardContext.Java:4704)
at org.Apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.Java:799)
at org.Apache.catalina.core.ContainerBase.addChild(ContainerBase.Java:779)
at org.Apache.catalina.core.StandardHost.addChild(StandardHost.Java:601)
at org.Apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.Java:675)
at org.Apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.Java:601)
at org.Apache.catalina.startup.HostConfig.deployApps(HostConfig.Java:502)
at org.Apache.catalina.startup.HostConfig.start(HostConfig.Java:1315)
at org.Apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.Java:324)
at org.Apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.Java:142)
at org.Apache.catalina.core.ContainerBase.start(ContainerBase.Java:1061)
at org.Apache.catalina.core.StandardHost.start(StandardHost.Java:840)
at org.Apache.catalina.core.ContainerBase.start(ContainerBase.Java:1053)
at org.Apache.catalina.core.StandardEngine.start(StandardEngine.Java:463)
at org.Apache.catalina.core.StandardService.start(StandardService.Java:525)
at org.Apache.catalina.core.StandardServer.start(StandardServer.Java:754)
at org.Apache.catalina.startup.Catalina.start(Catalina.Java:595)
at Sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at Sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at Sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at Java.lang.reflect.Method.invoke(Unknown Source)
at org.Apache.catalina.startup.Bootstrap.start(Bootstrap.Java:289)
at org.Apache.catalina.startup.Bootstrap.main(Bootstrap.Java:414)
Caused by: Java.lang.IncompatibleClassChangeError: class org.springframework.core.type.classreading.ClassMetadataReadingVisitor has interface org.springframework.asm.ClassVisitor as super class
at Java.lang.ClassLoader.defineClass1(Native Method)
at Java.lang.ClassLoader.defineClass(Unknown Source)
at Java.security.SecureClassLoader.defineClass(Unknown Source)
at org.Apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.Java:2818)
at org.Apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.Java:1159)
at org.Apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.Java:1647)
at org.Apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.Java:1526)
at Java.lang.ClassLoader.defineClass1(Native Method)
at Java.lang.ClassLoader.defineClass(Unknown Source)
at Java.security.SecureClassLoader.defineClass(Unknown Source)
at org.Apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.Java:2818)
at org.Apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.Java:1159)
at org.Apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.Java:1647)
at org.Apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.Java:1526)
at org.springframework.core.type.classreading.SimpleMetadataReader.<init>(SimpleMetadataReader.Java:63)
at org.springframework.core.type.classreading.SimpleMetadataReaderFactory.getMetadataReader(SimpleMetadataReaderFactory.Java:80)
at org.springframework.core.type.classreading.CachingMetadataReaderFactory.getMetadataReader(CachingMetadataReaderFactory.Java:102)
at org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider.findCandidateComponents(ClassPathScanningCandidateComponentProvider.Java:257)
... 47 more
依存関係のリストは次のとおりです。
activation-1.0.2.jar
antlr-2.7.7.jar
antlr-runtime-3.3.jar
arena-0.1.jar
asm-3.3.1.jar (removed from classpath)
aspectjweaver.jar
bcprov-jdk16-145.jar
c3p0-0.9.1.2.jar
cglib-2.1_3.jar
com.springsource.org.Apache.xml.serializer-2.7.1.jar
commons-beanutils-1.8.3.jar
commons-codec-1.7.jar
commons-collections-3.2.1.jar
commons-dbcp-1.4.jar
commons-digester-2.1.jar
commons-fileupload-1.2.2.jar
commons-httpclient-3.1.jar
commons-io-2.4.jar
commons-lang-2.6.jar
commons-logging-1.1.1.jar
commons-pool-1.6.jar
commons-vfs-patched-1.9.1.jar
commons-vfs2-2.0.jar
csv.jar
dom4j-1.6.1.jar
fop-1.0.jar
gson-2.2.2.jar
htmlcleaner-2.4.jar
httpclient-4.2.3.jar
httpcore-4.2.3.jar
httpcore-nio-4.2.3.jar
httpmime-4.2.3.jar
jaxen-1.1-beta-6.jar
jcifs-1.3.15.jar
jdom-1.0.jar
jersey-client-1.8.jar
jersey-core-1.8.jar
jersey-multipart-1.0.3.144640.jar
jersey-server-1.8.jar
jersey-spring-1.8.jar
joda-time-2.2.jar
joda-time-jsptags-1.1.1.jar
jodconverter-2.2.2.jar
json-lib-2.4-jdk15.jar
json-simple-1.1.1.jar
json-taglib-0.4.1.jar
jsoup-1.7.2.jar
jstl-1.2.jar
juh-3.2.1.jar
jurt-3.2.1.jar
log4j-1.2.17.jar
mail-1.4.5.jar
persistence-api-1.0.2.jar
poi-3.9.jar
poi-ooxml-3.9.jar
poi-ooxml-schemas-3.9.jar
poi-scratchpad-3.9.jar
postgresql-9.1-901-1.jdbc4.jar
quartz-2.1.6.jar
ridl-3.2.1.jar
scribe-1.3.3.jar
slf4j-api-1.7.5.jar
slf4j-jdk14-1.7.5.jar
spring-aop-3.2.2.RELEASE.jar
spring-asm-3.1.4.RELEASE.jar (removed from classpath)
spring-beans-3.2.2.RELEASE.jar
spring-context-3.2.2.RELEASE.jar
spring-context-support-3.2.2.RELEASE.jar
spring-core-3.2.2.RELEASE.jar
spring-expression-3.2.2.RELEASE.jar
spring-jdbc-3.2.2.RELEASE.jar
spring-tx-3.2.2.RELEASE.jar
spring-web-3.2.2.RELEASE.jar
spring-webmvc-3.2.2.RELEASE.jar
standard-1.1.2.jar
stax-api-1.0.1.jar
stringtemplate-4.0.2.jar
unoil-3.2.1.jar
velocity-1.7.jar
velocity-tools-2.0.jar
wmf2svg-0.9.3.jar
xalan-2.7.1.jar
xercesImpl-2.11.0.jar
xml-apis-1.4.01.jar
xmlbeans-2.6.0.jar
xmlgraphics-commons-1.5.jar
xstream-1.4.4.jar
Pomの依存関係を並べ替えることで同じ問題を解決しました。
Org.springframework.securityから問題が発生しました。それで、私は依存関係を終わらせました。
Mvndependency:treeを生成し、ツリーで古い春バージョンを探した後、同じ問題を解決しました。実際、私の依存関係にはorg.springframework:spring-asm:3.0.7-RELEASEへの依存関係がありました。
3.2.0を超えるスプリングバージョンを使用している場合、spring-asmはspring-coreに含まれているため、特別にspring-asmを含める必要はありません。
ビルド定義からspring-asmを削除し、spring-coreがあることを確認します。
私にとっても同じ問題です。 「mvndependency:tree」を実行し、古いバージョンのspring-aopが持ち込まれていることに気づいたので、ジャージースプリングの除外に追加して、問題を修正しました:
<dependency>
<groupId>com.Sun.jersey.contribs</groupId>
<artifactId>jersey-spring</artifactId>
<version>${jersey.version}</version>
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
</exclusion>
</exclusions>
<scope>provided</scope>
</dependency>
私は同様の問題を抱えていましたが、根本的な原因は、依存関係としてspring-asm 3.1.0を含む他のspring libでした。
私のgradleビルドスクリプトのすべての構成から「spring-asm」を除外することにより、この問題を修正しました。
configurations {
all*.exclude group: 'org.springframework', module: 'spring-asm'
}
Springセキュリティをアプリケーションに追加しようとしたときに、同じ問題に遭遇しました。追加することで問題は解決しました
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>3.2.2.RELEASE</version>
</dependency>
Jersey-spring依存関係で次の除外を追加する問題を解決しました。
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
</exclusion>