2013年12月3日火曜日

Spring SecurityのバージョンがSpring Frameworkと違うのでかなりハマりました。

Spring Securityを使う場合、これを書いている時点では3.1.4.RELEASEが最新だったのですが、Spring Frameworkの最新バージョン(3.2.4.RELEASE)と違うんだなと何気にpom.xmlに追加してmavenを走らせたらどえらくハマりました。。。

エラーエラーの連発で、どこの何がまずいのかメッセージを見てもサッパリ。ネットでいろいろ調べてみると、やっとの事で見つけました。

http://stackoverflow.com/questions/16801639/spring-core-3-2-2-spring-security-3-1-4-java-lang-incompatibleclasschangeerro
http://www.mkyong.com/mongodb/spring-asm-dependency-issue-in-spring-data/

要するにSpring Securityの3.1.4.RELEASEはSpringの3.0.7に依存してるので、裏で読み込まれているjarが3.0.7の物がいくつかあり、これがSpring 3.2.4と喧嘩してしまっている状態。どうやらここがハマった原因だったようです。mvn dependency:treeで確認。

解決方法としては、3.0.7でなくて3.2.4を明示的に読み込ませればOK。pom.xmlのdependencyManagementタグ内で古いjarを読み込んでるパッケージを明示的に3.2.4にしてやれば見事解決しました。

なぜSpringとSpring Securityでバージョンが違うのか?
なぜSpring Securityは最新のバージョンを読み込まないのか?

ここら辺が疑問ですが、こういう類のエラーは本当にSpringの嫌なとこですね。エラーメッセージを見ても分からないし、mvn dependency:treeなんてコマンド、今回初めて知りました。

ちょっと原因らしきことが書いてあります。異なるバージョンのjarを読み込んだ場合の優先度や明示的にpom.xmlで指定する話など。解決方法としてはいいけど、その都度mvn dependency:treeで調べないといけないのか。Spring SecurityをSpringの一部にすればいいのに。。

http://www.baeldung.com/spring-security-with-maven



0 件のコメント:

コメントを投稿