[S2JDBC]Maven2 surefire レポート作成時に ArrayIndexOutOfBoundsException
まんま同じ事象にブツかったのですが、s2-tiger 2.4.38 の場合、ML に載っているパッチだけでは他の場所でも ArrayIndexOutOfBoundsException が出てしまったので、念のためにパッチを晒しておきます。
cobertura-maven-plugin がカバレッジ測定用のコードを埋め込んだクラスファイルに対して、getInterfaces() と getGenericInterfaces() を実行すると、取得できるインタフェース数が異なるという問題。
surefire:test ゴールを実行した場合には事象が発生しない事から、cobertura-maven-plugin のバグと思われるのですが、ソースを追ってもよく分からない。
暫定対処として s2-tiger 2.4.38 に下記のパッチを当てることで、期待通りレポートを作成できました。
Index: src/main/java/org/seasar/framework/util/tiger/GenericUtil.java =================================================================== --- src/main/java/org/seasar/framework/util/tiger/GenericUtil.java (revision 4376) +++ src/main/java/org/seasar/framework/util/tiger/GenericUtil.java (working copy) @@ -266,7 +266,7 @@ final Class<?>[] interfaces = clazz.getInterfaces(); final Type[] interfaceTypes = clazz.getGenericInterfaces(); - for (int i = 0; i < interfaces.length; ++i) { + for (int i = 0; i < interfaces.length && interfaces.length == interfaceTypes.length; ++i) { gatherTypeVariables(interfaces[i], interfaceTypes[i], map); } @@ -298,7 +298,7 @@ final Class<?>[] interfaces = clazz.getInterfaces(); final Type[] interfaceTypes = clazz.getGenericInterfaces(); - for (int i = 0; i < interfaces.length; ++i) { + for (int i = 0; i < interfaces.length && interfaces.length == interfaceTypes.length; ++i) { gatherTypeVariables(interfaces[i], interfaceTypes[i], map); } }
なんでこれで動くのかはよく分かっていませんが、とりあえずこれで mvn install -Dmaven.test.skip=true したら動きました。