web-dev-qa-db-ja.com

起動時のクラス競合Javaプロジェクト:ClassMetadataReadingVisitorにはスーパークラスとしてorg.springframework.asm.ClassVisitorインターフェースがあります

最新の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;
        ....
}

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

Pomの依存関係を並べ替えることで同じ問題を解決しました。

Org.springframework.securityから問題が発生しました。それで、私は依存関係を終わらせました。

12
Thanuja

Mvndependency:treeを生成し、ツリーで古い春バージョンを探した後、同じ問題を解決しました。実際、私の依存関係にはorg.springframework:spring-asm:3.0.7-RELEASEへの依存関係がありました。

31
Gaetan

3.2.0を超えるスプリングバージョンを使用している場合、spring-asmはspring-coreに含まれているため、特別にspring-asmを含める必要はありません。

ビルド定義からspring-asmを削除し、spring-coreがあることを確認します。

http://docs.spring.io/spring-framework/docs/3.2.16.RELEASE/spring-framework-reference/htmlsingle/#migration-3.2-inline-asm を参照してください

12
Alex Bretet

私にとっても同じ問題です。 「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>
6
Russ Jackson

私は同様の問題を抱えていましたが、根本的な原因は、依存関係としてspring-asm 3.1.0を含む他のspring libでした。

私のgradleビルドスクリプトのすべての構成から「spring-asm」を除外することにより、この問題を修正しました。

configurations {
    all*.exclude group: 'org.springframework', module: 'spring-asm'
}
6
Raj

Springセキュリティをアプリケーションに追加しようとしたときに、同じ問題に遭遇しました。追加することで問題は解決しました

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-web</artifactId>
    <version>3.2.2.RELEASE</version>
</dependency>
3
Dino Tw

Jersey-spring依存関係で次の除外を追加する問題を解決しました。

<exclusion>
    <groupId>org.springframework</groupId>
    <artifactId>spring-aop</artifactId>
</exclusion>
2
Nash