下記の順序で環境を更新していったときに、問題が起こったのでメモしておきます。
Mavenとかは、使っていなかったので、Spring Frameworkから提供されているspring-xxx系のjarすべてをバージョン3.X系からバージョン4.X系のものに手動で置き換えました。
(Spring Frameworkはバージョン5.X系ももう出ているのですね。既に置いていかれているorz...)
無事にアプリケーションが起動するようになりました!
ただ普通は、こんな乱暴にjarを入れ替えることは難しいので、アップデートはもっと慎重にやるべきでしょうね。
- Spring 3 + Java 7: もともとの環境。
- Spring 3 + Java 8 (Java 8のラムダ機能などのJava 8からの新機能は未使用): 問題なく動作。
- Spring 3 + Java 8 (Java 8のラムダ機能などのJava 8からの新機能を使用): 起動時に下記のExceptionが発生
org.springframework.beans.factory.BeanDefinitionStoreException: Failed to read candidate component class: URL ...(途中省略)... java.lang.ArrayIndexOutOfBoundsException: xxx
Mavenとかは、使っていなかったので、Spring Frameworkから提供されているspring-xxx系のjarすべてをバージョン3.X系からバージョン4.X系のものに手動で置き換えました。
(Spring Frameworkはバージョン5.X系ももう出ているのですね。既に置いていかれているorz...)
無事にアプリケーションが起動するようになりました!
ただ普通は、こんな乱暴にjarを入れ替えることは難しいので、アップデートはもっと慎重にやるべきでしょうね。
コメント
現在同じような調査を行っており、この記事が気になりコメントをさせて頂きました。
「Googleで調べたところJava 8から導入された新機能を使う場合は、Spring 4に更新しないといけないようです。」をありましたが、この内容の出処はどこでしょうか?
図々しい質問で申し訳ありません。
よろしくお願いいたします。
「SpringでJava 8互換のfunctional interfaceを使う場合はSpring 4にあげましょう」と書かれています。
https://www.javagists.com/beandefinitionstoreexception-failed-to-read-candidate-component-class
バージョンアップは簡単ではないことが多いですよね。