LoginSignup
3
3

More than 5 years have passed since last update.

Jettyを組み込んだall in one jarを作成する

Posted at

備忘録。細かいところで過不足あるかも。

sbt

sbt-assemblyプラグインを指定

plugins.sbt
addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.10.2")

ビルド定義ではJettyを依存ライブラリに追加して、sbt-assemblyの設定

build.sbt
import sbtassembly.Plugin._
import AssemblyKeys._

libraryDependencies ++= Seq(
  "org.eclipse.jetty" % "jetty-webapp" % "8.1.8.v20121106" % "compile;container",
  "org.eclipse.jetty.orbit" % "javax.servlet" % "3.0.0.v201112011016" % "compile;container;provided;test" artifacts (Artifact("javax.servlet", "jar", "jar")))

assemblySettings

jarName in assembly := "xxx.jar"

mainClass in assembly := Some("JettyLauncher")

assemblyOption in assembly ~= { _.copy(includeScala = true) }

アプリ

Basic認証つきのランチャobjectを作成する。

JettyLauncher
object JettyLauncher {
  def main(args: Array[String]) {
    val server = new Server(8080)
    val context = new WebAppContext()
    context setContextPath "/"
    context.setResourceBase("/src/main/webapp")
    // ↓scalatra前提
    context.addEventListener(new ScalatraListener)
    context.addServlet(classOf[DefaultServlet], "/")
    context.addServlet(new ServletHolder(new MyDefaultServlet), "/css/*")

    val securityHandler = new ConstraintSecurityHandler()
    val constraint = new Constraint()
    constraint.setName(Constraint.__BASIC_AUTH)
    constraint.setRoles(Array[String]("user"))
    constraint.setAuthenticate(true)
    // mappings
    val mapping = new ConstraintMapping()
    mapping.setPathSpec("/")
    mapping.setConstraint(constraint)
    securityHandler.setConstraintMappings(Array[ConstraintMapping](mapping))
    // login service
    val loginService = new HashLoginService()
    loginService.putUser("XXX", new Password("yyy"), Array[String]("user"))
    securityHandler.setLoginService(loginService)
    // authenticator
    val authenticator = new BasicAuthenticator()
    securityHandler.setAuthenticator(authenticator)
    // set Security
    context.setSecurityHandler(securityHandler)

    server.setHandler(context)

    server.start
    server.join
  }
}

class MyDefaultServlet extends DefaultServlet {
  override def getResource(resourceString: String): Resource =
    {
      val url = this.getClass().getResource(resourceString)
      Resource.newResource(url)
    }
}

ビルド

ビルドコマンド
sbt assembly

起動

起動コマンド
java -Xmx2048M -cp ./xxx.jar JettyLauncher
3
3
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
3
3