🗂
[Ktor]やっとAuto-reloadできた
公式にはすごい簡単に書いてあったのに変に苦労したので、備忘録として残しておくか~と思って。
手順
- development modeを有効にする
- watch pathsを設定する
- Rebuildする
- アプリケーションの実行
development modeを有効にする
embeddedServerを使っていたので、build.gradle.kts内で設定した。
build.gradle.kts
application {
applicationDefaultJvmArgs = listOf("-Dio.ktor.development=true")
}
watch pathsを設定する
これはembeddedServer関数に渡す。ファイルの内容が変更されたかどうかを監視するためっぽい。(公式はoptionalって言ってるから無くてもいいのかもしれないよくわからんのでちゃんと確認しよ)
Application.kt
fun main() {
embeddedServer(
Netty,
port = 8080,
host = "0.0.0.0",
watchPaths = listOf("classes")
) {
// 上の関数の第四引数の通りに渡す
get() {
//Do something
}
}.start(wait = true)
}
Rebuildする
ここからが躓いたポイント。まずTerminalで./gradlew -t build -x test -i
を実行する(testも含めてRebuildしたい場合はbuildまででOK)。最後にこんな感じの結果が返ってくれば成功。
BUILD SUCCESSFUL in 4s
11 actionable tasks: 11 up-to-date
Watched directory hierarchies: [C:\Users\hoge\IdeaProjects\ktor-sample]
Waiting for changes to input files... (ctrl-d then enter to exit)
<-------------> 0% WAITING
ただし、この状態だとプロセスは終了しておらず、ファイルが変更されるのを待ち続けている。変更されるともう一度Rebuildされ、正常に完了すると上の状態に戻る。これを終わらせるにはCtri-DとEnterを押す。
アプリケーションの実行
ここでTerminalから実行するのだが、上のプロセスを終わらせてはいけない。新しいセッションを立ち上げて、そっちで実行する(自分はずっとここで引っかかってできなかった)。
新規セッションで./gradlew run
を実行し、こんな感じで止まればOK。
2022-10-19 20:04:17.931 [main] INFO ktor.application - Application started in 0.145 seconds.
2022-10-19 20:04:18.340 [main] INFO ktor.application - Responding at http://127.0.0.1:8080
<===========--> 85% EXECUTING [20s]
> :run
ここで http://127.0.0.1:8080 に飛べば、あなたの作ったページが表示される。
Auto-reloadの動作確認
ファイルの中身を書き換える(サンプルコードのテキストを変更するとか)と自動でプロジェクトがRebuildされるので、それが完了したら開いているページを更新する。変更が反映されていれば無事Auto-reloadが機能していることになる。おめでとう!!
Discussion