xsbt-web-pluginでServlet 5対応アプリを実行する

ScalatraのサンプルアプリケーションやGitBucketでは開発にxsb-web-pluginというJava Servletアプリケーション開発を支援するsbtプラグインを使っています。

github.com

ですが、標準でサポートされているのはJetty 9.4(Servlet 3.1)およびTomcat 9.0(Servlet 4.0)となっています。パッケージ名が javax.servlet から jakartaee.servlet に変更されたServlet 5.0に対応したプラグインは今のところ提供されていません。

ただし、xsb-web-pluginはカスタムコンテナもサポートしているのでbuild.sbtに以下の設定を追加することでJetty 11(Servlet 5.0)を使用することができます。

// カスタムコンテナとしてJetty 11を使用
enablePlugins(ContainerPlugin)
Container / containerLibs := Seq(("org.eclipse.jetty" %  "jetty-runner" % "11.0.11").intransitive())
Container / containerMain := "org.eclipse.jetty.runner.Runner"

以下のようにして起動します。

sbt ~container:start

ちなみにxsbt-web-pluginはTomcatのサポートに関してはHerokuのwebapp-runnerを使用しており、このwebapp-runnerのサポートが現状ではTomcat 9までとなっているようです。Tomcatでも埋め込みサーバ用のライブラリが提供されているのでランチャーを自作すればTomcat 10を使用してServlet 5の開発ができそうです。

github.com

今となってはScalaServletアプリケーションを開発するのは少数派と思いますが、GitBucketではJGitのGitServletを使っている関係で今後もServletを使わざるを得ないのでxsbt-we-pluginでもServlet 5対応コンテナを正式にサポートしてほしいところです。