java.io.IOException: invalid constant type: 15

IT, Java

Seasar2のプロジェクトのJavaをJava8にした所、
java.lang.RuntimeException: java.io.IOException: invalid constant type: 15
が発生しました。


原因

SeaSar2はJava8に対応していない部分があるらしいです。
今回のエラーを引き起こした具体的犯人は「javassist-3.4.ga.jar」でした。
こいつをJava8に対応するバージョンにしないと上記のエラーが発生するようです。


対処

javassistのJava8対応バージョンのjavassist-3.20.0-GAをゲットしました。
こいつをビルドパスに追加した所、エラーなく正常動作しました。


関連

Java8に対応していないjavassistを使用すると、
java.lang.RuntimeException: java.io.IOException: invalid constant type:18
というエラーが発生する可能性があります。
Java8で追加されたラムダ式とかを使用する時に発生するらしいです。
こいつもjavassistをjavassist-3.20.0-GAにしてやれば発生しなくなります。


まとめ

java.lang.RuntimeException: java.io.IOException: invalid constant type: 15
または
java.lang.RuntimeException: java.io.IOException: invalid constant type:18
が出たら、犯人はjavassist。

IT, Java

Posted by raishin