背景
過去に何度かTomcatに致命的な脆弱性が見つかって対策パッチを適用したりバージョンを上げたりして対応することが何度かあったのだが、SpringBootみたいに組み込まれているTomcatのバージョンだけを上げたいような場合、どうやればいいのか気になったので調べてみた。
前提環境
バージョンを上げる前のバージョンは以下のとおり。
- SpringBoot 2.3.0.RELEASE
- Tomcat 9.0.35
- Gradle 5.6
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.3.0.RELEASE)
INFO 1431 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
INFO 1431 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.35]
tomcat.version
を設定するだけでいい
結論から言うとbuild.gradle
に以下の記述を足すだけで良い。どうやらSpringBootはspring-boot-dependencies
という部品がバージョン管理しているようで、このspring-boot-dependencies
にはバージョンプロパティが用意されていて、この値を変更するだけでTomcatだけでなく他の依存ライブラリのバージョンも上げることができるようだ。
ext['tomcat.version'] = '9.0.50'
- 公式ドキュメント
-
tomcat.version
などのバージョンプロパティ一覧
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.3.0.RELEASE)
INFO 3146 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
INFO 3146 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.50]
その他注意事項
バージョンプロパティに値を設定するだけでバージョンを変えること自体は容易だが、これによって依存していた処理が動かなくなることも考えられるので、動作確認はちゃんと行ったほうが良い。
また、今回はGradle5.6で試したが、公式の記述にあるように今回のやり方でバージョンを上げるには Gradle6.3以降が推奨されているので、もしGradleのバージョンが足りていないなら、Tomcatのバージョンを上げる前にGradleのバージョンを上げなければならない。あるいはGradleの前提としているJDKバージョンも上げないといけないかもしれない。となると、開発用のJavaバージョンと開発ツールのJavaバージョンをあわせているプロジェクトでは、このあたりの開発環境の影響も考慮したほうがいいだろう。