EclipseではJSPの変更点を保存すると勝手にコンパイルされブラウザに反映されていた(サーブレットはサーバーを再起動する必要があるけど)。しかし、IntelliJでは保存するという動作がなく、デフォルトでは勝手にデプロイされることがない。これは私を非常に苦しめた。JSPはテンプレートエンジンだから少しずつ画面を見ながら修正していく。それを一々ビルドしてデプロイしていたらその間に余計な思考が入り込んでしまいコーディングどころではない。
Springフレームワークを使えばspring-boot-devtools
が利用可能であるが、サーブレットJSPとTomcatではその便利なツールを使うことは出来ない。色々調べてもなかなか上手くいかなかったが何とかホットスワップ出来たのでメモしておく。
開発環境は下記。
- macOS Catalina 10.15.7
- IntelliJ IDEA Ultimate 2020.3
- Tomcat 9.0.40
- Apache Maven 3.6.3
- Java 1.8.0_131
- Build, Execution, Deployment > Compiler > Build project automaticallyにチェック
- Appearance & Behavior > System Settings > Save files automatically if application is idle for にチェックを入れ、時間を10秒程度に設定
- Registryのcompiler.automake.allow.when.app.runningにチェック
ここまでがIntelliJの基本的な設定。次はTomcatを利用した際の方法。別のサーバーを使う場合は違う方法かもしれない。そこはちょっと分からん。

- Edit configurations… > deployment > Deploy at the server setupでwar explodedを選択
- Server > On ‘Update’ actionでUpdate classes and resourcesを選択
- (任意)On frame deactivationでUpdate classes and resourcesを選択
- このオプションを使えばIntelliJから他のアプリに移動した時にコンパイルされる。めっちゃ便利。画面下のマークからも変更可能。

参考↓