おはようございます。@naokiurです。
よろしくお願い致します。
2019年も引き続き、
個人的にKotlin/Ktorに興味を持っている毎日です。
AutoReload、便利ですよね。
公式に習い、設定したいと思います。
環境
- MacBook Pro (Retina 13-inch、Early 2015)
- macOS High Sierra 10.13.6
- Java 1.8.0_191
- IntelliJ IDEA CE 2018.3.4
実施したこと
- application.confを修正した。
結果
- AutoReloadが有効になった。
AutoReloadの設定
実施方法は2つあります。
-
embeddedServer
に記載する -
application.conf
に記載する
自分の今回のコードでは、 embeddedServer
でサーバを起動しておらず、
application.conf
に設定を記載し、
io.ktor.server.netty.EngineMain
を実行することで、
サーバを起動しておりました。
そのため、
「application.conf
に記載する」方法を取りました。
ktor {
deployment {
port = 8080
watch = [ out/production ] // ← 追記する
}
application {
modules = [ jp.ne.naokiur.api.ExecutorKt.api ]
}
}
application.conf
内の watch
キーに、
今回のコードのコンパイル出力フォルダを設定します。
IntelliJのデフォルトになっているため、
out/production
を設定しました。
これによって、
コンパイル出力フォルダに変更があった場合、
AutoReloadするようになりました。
サーバ起動時、以下のようなログが出力されます。
16:36:19.876 [main] DEBUG Application - Watching /絶対パス/out/production/classes/〜 for changes.
ただし
コンパイル出力フォルダに変更があった場合
なので、
gradle build
や、
IntelliJのcmd + F9で Build Project
を実施する必要があります。
勘違いしたところ
熟読しなかった自分のせいなのですが、
公式に watch = [ module1, module2 ]
と書いてあったため、
最初、今回のコードのモジュール名である、 api
を設定してしまいました。
これでは有効にならず、
AutoReloadが有効になっていない旨の、
以下のようなログが出力されてしまいました。
16:20:24.636 [main] INFO Application - No ktor.deployment.watch patterns match classpath entries, automatic reload is not active
そのあたりのことは、ちゃんと公式にかかれていました…。
file:///path/to/project/build/classes/myproject.jar
というクラスパスならば、
to/project
だとマッチします。
しかしパッケージ名のようなcom.mydomain
ではマッチしません。
今後
DBアクセスを実施したいと思っています。