我在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应用程序。怎么办?
答案 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
启动。我认为就是这样。祝你好运!