これを書いている時点では公式ページの告知は無いが、struts-2.2.3がリリースされている。
Mavenリポジトリには既に最新版が配置済みのようで、Ivyで全ての依存関係を更新したらjarが落ちてきた。
しかしこのstruts-2.2.3、ちょっとクセがあるようで、Webアプリが起動しなくなってしまった。。。
調べてみたところ
スタックトレースがドバーッとでる。
2011-05-06 19:10:49,904 ERROR [ClassFinder] Thread-2 - Unable to read class [foo.Bar] java.lang.NoClassDefFoundError: com/opensymphony/xwork2/util/finder/ClassFinder$InfoBuildingVisitor at com.opensymphony.xwork2.util.finder.ClassFinder.readClassDef(ClassFinder.java:780) ~[xwork-core-2.2.3.jar:2.2.3] at com.opensymphony.xwork2.util.finder.ClassFinder.<init>(ClassFinder.java:165) ~[xwork-core-2.2.3.jar:2.2.3] at org.apache.struts2.convention.PackageBasedActionConfigBuilder.findActions(PackageBasedActionConfigBuilder.java:376) [struts2-convention-plugin-2.2.3.jar:2.2.3] at org.apache.struts2.convention.PackageBasedActionConfigBuilder.buildActionConfigs(PackageBasedActionConfigBuilder.java:334) [struts2-convention-plugin-2.2.3.jar:2.2.3] at org.apache.struts2.convention.ClasspathPackageProvider.loadPackages(ClasspathPackageProvider.java:53) [struts2-convention-plugin-2.2.3.jar:2.2.3] at com.opensymphony.xwork2.config.impl.DefaultConfiguration.reloadContainer(DefaultConfiguration.java:215) [xwork-core-2.2.3.jar:2.2.3] at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:66) [xwork-core-2.2.3.jar:2.2.3]
げ、何だコリャ。クラスfoo.Barは間違いなくにWEB-INF/classesに配置されているのに。
しかも、com/opensymphony/xwork2/util/finder/ClassFinder$InfoBuildingVisitorはちゃんとxwork-2.2.3.jarに含まれてるぞ?
うむ。ワケワカラン。
デバッガの出番
スタックトレースが大量に出てしまって、最初のエラーが何だったのか消えてしまったので、
デバッガで起動してみた。すると、原因が判明。
詳しい説明は端折るが、要するに
com.objectweb.asm.commons.EmptyVisitor
が見つからないことが根本原因。
で、xwork-2.2.3.jarの中身を確認したところ、確かにASM関連のクラスがゴソッと消えている。
以前は、"org.objectweb.asm.xwork"などというパッケージ名で、
特定のバージョンのASMのクラスを丸ごと含んでしまっているという
行儀の悪い依存関係が設定されていたわけだが、それを除去した模様。
たしかに正しい処置なんだけど、いきなりのことなので混乱する人も多いんじゃないかなぁ。。。
で、最終的には
<dependency org="asm" name="asm-all" rev="latest.release" />
という依存関係を追加することで、解決した。ヤレヤレ。