Spring DataのSpring asm依存関係の問題
Spring Data MongoDB 1.2.1.RELEASEとSpringコア3.2.2.RELEASEを使用すると、システムの起動中に、いくつかの奇妙なSpring-asmIncompatibleClassChangeError
エラーが発生します。
java.lang.IncompatibleClassChangeError: class org.springframework.core.type.classreading.ClassMetadataReadingVisitor has interface org.springframework.asm.ClassVisitor as super class
pom.xml
3.2.2.RELEASE 1.2.1.RELEASE org.springframework spring-core ${spring.version} org.springframework.data spring-data-mongodb ${springdata.version} org.springframework spring-web ${spring.version} org.springframework spring-webmvc ${spring.version}
溶液
これは、Springデータが古いspring-asm 3.1.4.RELEASEを取得しており、最新のSpringコア3.2.2.RELEASEと競合しているためです。
Mavenのコマンドmvn dependency:tree
を使用してすべての依存関係を確認します。
# mvn dependency:tree [INFO] +- org.springframework:spring-core:jar:3.2.2.RELEASE:compile [INFO] | \- commons-logging:commons-logging:jar:1.1.1:compile [INFO] +- org.springframework.data:spring-data-mongodb:jar:1.2.1.RELEASE:compile [INFO] | +- org.springframework:spring-tx:jar:3.1.4.RELEASE:compile [INFO] | +- org.springframework:spring-context:jar:3.1.4.RELEASE:compile [INFO] | | \- org.springframework:spring-asm:jar:3.1.4.RELEASE:compile [INFO] | +- org.springframework:spring-beans:jar:3.1.4.RELEASE:compile [INFO] | +- org.springframework:spring-expression:jar:3.1.4.RELEASE:compile [INFO] | +- org.springframework.data:spring-data-commons:jar:1.5.1.RELEASE:compile [INFO] | +- org.slf4j:slf4j-api:jar:1.7.1:compile [INFO] | \- org.slf4j:jcl-over-slf4j:jar:1.7.1:runtime [INFO] +- org.springframework:spring-web:jar:3.2.2.RELEASE:compile [INFO] | +- aopalliance:aopalliance:jar:1.0:compile [INFO] | \- org.springframework:spring-aop:jar:3.2.2.RELEASE:compile [INFO] \- org.springframework:spring-webmvc:jar:3.2.2.RELEASE:compile
それを修正するいくつかの方法。
1. Springデータの依存関係「AFTER」をSpring関連の依存関係として定義します。 Maven推移的依存関係は、正しいSpring依存関係を自動的に取得します。
pom.xml
3.2.2.RELEASE 1.2.1.RELEASE org.springframework spring-core ${spring.version} org.springframework spring-web ${spring.version} org.springframework spring-webmvc ${spring.version} org.springframework.data spring-data-mongodb ${springdata.version}
Maven依存関係ツリーをもう一度確認してください。
2. 除外リストにspring-asm
を追加します。
pom.xml
org.springframework.data spring-data-mongodb ${springdata.version} org.springframework spring-asm
3. 最新のSpringデータリリースを待ってください:)
Note
詳細については、このthreadを参照してください。