備忘録。細かいところで過不足あるかも。
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