与嵌入式码头的自包含战争

时间:2014-03-26 23:30:54

标签: war lift embedded-jetty

我在scala中有一个sbt项目,我正在开始嵌入jetty java mywar.war package.main

我正在关注jetty文档,我的主要类看起来像:

object RunWebApp extends App {
    val server = new Server
    val scc = new SelectChannelConnector
    scc.setPort(8080)
    server.setConnectors(Array(scc))

    val context = new WebAppContext()
    context.setServer(server)
    context.setContextPath("/")
    context.setWar("src/main/webapp") //works in IDEA
    //also tried this: 
    //val warUrl=RunWebApp.getClass.getClassLoader().getResource("/mywar.war")
    //              warUrl.toExternalForm() do not work!
    context.setWar("/mywar.war") // do not work!

    server.addHandler(context)

    try {
        println(">>> STARTING EMBEDDED JETTY SERVER, PRESS ANY KEY TO STOP")
        server.start()
        while (System.in.available() == 0) {
            Thread.sleep(5000)
        }
    server.stop()
    server.join()
    } catch {
        case exc : Exception => {
          exc.printStackTrace()
          System.exit(100)
        }
    }
}

但localhost:8080上的浏览器呈现Directory /而不是Web应用程序。怎么办?

1 个答案:

答案 0 :(得分:3)

我正在使用这两个文件来运行jetty:

https://github.com/vn971/roboCup/blob/master/src/main/scala/bootstrap/liftweb/Start.scala

https://github.com/vn971/roboCup/blob/master/build.sbt

第一个是Scala代码,用于启动jetty。 val webappDir显示了以“汇编”模式(* .war或* .jar)启动服务器的hacky技术。

第二个是构建文件。里面的一切都是可选的,可以跳过。但是:

  • 我使用sbt-revolver进行快速编辑 - 编译 - 查看循环,并完全防止内存/资源泄漏。
  • 我使用sbt-assembly插件打包* .war / * .jar
  • resourceGenerators in Compile”周围的行显示如何将sbt-assembly复制/ src / main / webapp复制为* .war / * .jar。
  • 我在主范围内使用jetty-webapp依赖,而不是“提供”。这是因为根本不想使用任何tomcats / glassfishes。该应用程序可以使用java -jar appname.jar启动。

我认为就是这样。祝你好运!

相关问题