ドキュメントを読んでいてもよくわからなかったので試したことのメモ。
sbtの中からテスト用にServletコンテナ(JettyとかTomcatとか)を起動するxsbt-web-plugin
というsbt pluginが有る。
いつからか、このプラグイン経由でjettyを起動すると以下のようなアラートが出るようになっていた。
WARNING: jetty-runner is deprecated. See Jetty Documentation for startup options https://www.eclipse.org/jetty/documentation/
しかし、ドキュメントへのリンク先は全体のトップページだし、辿っていった以下のドキュメントにも普通に使い方が書かれているだけでdeprecatedになった件に関する情報は書かれていなかった。
https://www.eclipse.org/jetty/documentation/9.4.35.v20201120/#runner
Issueを辿っていくと、2017年に上げられた話だそうだ。xsbt-web-pluginが内部で使っているjetty-runnerというモジュールが非推奨になっている。
jetty-runnerはすべてのモジュールを単一のjarに含めて提供する形式なのだけど、Java9以降のモジュールシステムを考慮すると、それは適切ではない(何を持って全部入りと言えなくなるから?)、という趣旨のようだ。
将来リリースされるJetty 10や、並行で開発が進んでいるJetty 11ではまだ残っているようだけど、いつ削除されるかは分からない(Java9で導入されたモジュールシステムがどの程度利用されるのかは分からないけど……)ので、ここは一つ他のやり方を探した。
jetty-home
jetty-runnerの代わりに推奨されているのは、jetty-homeだ。
jettyのディストリビューションは2種類用意されていて、デモアプリなどを含んだjetty-distribution
と、サーバとして必要最小限なもののみを含んだjetty-home
の2種類が用意されている。なぜかjetty-distribution
はeclipse foudationのサイトから配布されているのに、jetty-home
はmaven repositoryから配布されている。
https://www.eclipse.org/jetty/download.html
https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-home/
基本的な使い方
> JETTY_BASE=/tmp/mybase > mkdir $JETTY_BASE > cd $JETTY_BASE > java -jar $JETTY_HOME/start.jar --create-startd > java -jar $JETTY_HOME/start.jar --add-to-start=http,deploy > cp {warファイルへのパス} webapps/{warファイル名}.war > java -jar $JETTY_HOME/start.jar
これで起動します。ただし、このままではhttp://localhost:8080/{warファイル名}
が初期エントリポイントになってしまうので、webappsディレクトリに、マッピング用のxmlファイルを作成します。名前はなんでも良いですが、拡張子xmlを忘れずに。
<?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN" "http://www.eclipse.org/jetty/configure.dtd"> <Configure class="org.eclipse.jetty.webapp.WebAppContext"> <Set name="contextPath">/j</Set> <Set name="war">{warファイルへの絶対パス}</Set> </Configure>
例えばcontextPathに、/jetty
とつければ初期アドレスは、http://localhost:8080/jetty
になります。
これから
ということでsbtプラグインの中で、これらダウンロード、ディレクトリ構成の作成、アプリの配置、起動などができれば、deprecatedなAPIを使わなくてもよくなる、というわけです。今日はここまで。