はじめに
元々作成していたプロジェクトがSpring Boot 1.3.3だったのですが、
4月にSpring Frameworkの脆弱性の件があったので、
それに対応したSpring Boot 1.5.12にバージョンアップする事になりました。
単純にpom.xmlでバージョンを書き換えるだけではもちろんダメだったので…
その時に発生した問題やその解消方法を以下に載せます。
テストコードのコンパイルエラー
テストコードにて以下の二つのアノテーションを使用していましたが、
バージョンアップに伴い「見つかりませんよ」と怒られるようになってしまいました。
@SpringApplicationConfiguration(classes=MyConfig.class)
@WebIntegrationTest
調べたところ、以下のページにて両方とも@SpringBootTestを代わりに使用する形になるとのこと。
https://stackoverflow.com/questions/42395225/springapplicationconfiguration-not-found-erroneous-spring-boot-starter-test-con
From @SpringApplicationConfiguration(classes=MyConfig.class) to @SpringBootTest(classes=MyConfig.class)
From @WebIntegrationTest to @SpringBootTest(webEnvironment=WebEnvironment.DEFINED_PORT) (or RANDOM_PORT)
今回は両方使っていたので、以下のように書き換えました。
@SpringBootTest(classes=MyConfig.class, webEnvironment=WebEnvironment.RANDOM_PORT)
以上にて、テストコードのエラーは解消しました。
インタフェースが見つからないエラー
エラー画面を表示するためにEmbeddedServletContainerCustomizerインタフェースをimportしていたのですが、
バージョンアップ後ビルドすると「見つからないよ」と怒られるようになってしまいました。
ほんとか?と思いながら上記のテストコードのように代替を探したのですが見つからず…。
本当に無いのかな?と思い、spring-boot-1.5.12.RELEASE.jarの下の階層を探ってみると、
EmbeddedServletContainerCustomizerインタフェースのファイル自体は存在していました。
その上で中身を見ようとすると以下のエラーが発生しており、中身を見れない状態。```
java.util.zip.ZipException: invalid LOC header (bad signature)
調べてみると、jarファイルのバージョンがおかしい事が原因らしい?
対応方法として以下のmavenのリポジトリフォルダを削除してSTSを再起動する。
> C:\Users\[ユーザー名]\.m2\repository
以上で、インタフェースが見つからないエラーの対応は完了です。
# プロジェクト実行時のエラー
上記二つの対応とは別に、
バージョンアップ後にとりあえずプロジェクトを実行してみようと思ったところ、
以下のような絶望的なエラーが発生。
Exception in thread "main" java.lang.NoClassDefFoundError: org/springframework/boot/SpringApplication
at jp.co.ysk.pepper.qlip.App.main(App.java:12)
Caused by: java.lang.ClassNotFoundException: org.springframework.boot.SpringApplication
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 1 more
少し調べてみたのですが、根本的な原因はわからず。
とりあえず二つのコンパイルエラーを解消していくとこのエラーも解消されました。
少し不安の残る感じですが…以上です。