LoginSignup
1
0

More than 1 year has passed since last update.

Scalatra3.0.0-M2を動かした

Last updated at Posted at 2022-08-30

目的

Scalatra3.0.0-M2を動かすにあたり、sbt new scalatra/scalatra.g8したところ、動かない箇所がいくつかあったので忘備録。なおTwirlは要らないのとライブラリがConflictして動かなかったので全部削除している。

なおJettyPluginをContainerPluginに変更するとjetty:startcontainer:startに変わる。

build.sbt

val ScalatraVersion = "3.0.0-M2"

// Scala3系に対応したので最新のScalaにしてみた
ThisBuild / scalaVersion := "3.1.3"
ThisBuild / organization := "com.ponkotuy"
// いつもの。おこのみで
ThisBuild / scalacOptions ++= Seq("-unchecked", "-deprecation")

lazy val hello = (project in file("."))
  .settings(
    name := "Photographic Indexer",
    version := "0.1.0-SNAPSHOT",
    libraryDependencies ++= Seq(
      "org.scalatra" %% "scalatra" % ScalatraVersion,
      "org.scalatra" %% "scalatra-scalatest" % ScalatraVersion % "test",
      "ch.qos.logback" % "logback-classic" % "1.2.3" % "runtime",
// Jettyが11にアップデートしたので対応する
      "org.eclipse.jetty" % "jetty-webapp" % "11.0.11" % "container",
// Jetty11はjakartaになったのでこちらもjavax.servletから変更
      "jakarta.servlet" % "jakarta.servlet-api" % "5.0.0"
    )
  )

// TwirlはConflictしていたのと使わないので一旦削除
// JettyPluginはJettyが9.x系なのでpluginを自作する必要がある
enablePlugins(ContainerPlugin)

val jettyRunner = "org.eclipse.jetty" %  "jetty-runner" % "11.0.11"

Container / containerLibs := Seq(
  jettyRunner.intransitive()
)
Container / containerMain := "org.eclipse.jetty.runner.Runner"

ScalatraBootstrap.scala

import com.ponkotuy.app._
// javaxからjakartaに変わったので変更する
import jakarta.servlet.ServletContext
import org.scalatra._

class ScalatraBootstrap extends LifeCycle {
  override def init(context: ServletContext): Unit = {
    context.mount(new MyScalatraServlet, "/*")
  }
}

CORS

多分CORSまわりがバグってる?ようで、Cross-Originのアクセスに必要なヘッダが付与されないので、自前で設定する必要がある。localhostだけ許可するみたいな要件だと、こんな感じのtraitを作って必要なハンドラに食わせる。

trait CORSSetting { self: ScalatraServlet =>
  val Localhost = "\\Ahttp://localhost(:\\d+)?\\z".r
  before() {    
    val origin = Option(request.getHeader("Origin"))
    if(origin.exists(Localhost.matches)) {
      response.setHeader("Access-Control-Allow-Origin", origin.get)
    }
  }
}

plugins.sbt

たぶん書き換えしなくても動く

// Twirlは使わないので削除していい
// 4.2.4が最新なので一応
addSbtPlugin("com.earldouglas" % "xsbt-web-plugin" % "4.2.4")
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0