【发布时间】:2016-06-17 19:15:55
【问题描述】:
我正在尝试“从头开始”创建 Lift Web 应用程序,但遇到了一些困难。我从xsbt-web-plugin version 2.1 开始,并设法让它与一个简单的Jetty servlet 一起工作。然后我尝试整合来自Lift Cookbook的信息。
这是我的build.sbt:
organization := "ford.nathaniel"
name := "Lift From Scratch"
version := "0.1-SNAPSHOT"
scalaVersion := "2.11.7"
libraryDependencies += "javax.servlet" % "javax.servlet-api" % "3.0.1" % "provided"
enablePlugins(JettyPlugin)
libraryDependencies ++= {
val liftVersion = "3.0-M8"
Seq(
"net.liftweb" %% "lift-webkit" % liftVersion % "compile",
"org.eclipse.jetty" % "jetty-webapp" % "9.2.1.v20140609" % "container, test",
"org.eclipse.jetty" % "jetty-plus" % "9.2.1.v20140609" % "container, compile"
)
}
我有一个(一行)project/plugins.sbt:
addSbtPlugin("com.earldouglas" % "xsbt-web-plugin" % "2.1.0")
我直接从上面链接的 Cookbook 中提取了 Boot.scala 文件并将其放在 src/main/scala/bootstrap 和类似的 src/main/webapp/WEB-INF/web.xml 中。我可以从命令行运行sbt,它加载干净,但是当我尝试container:start...
> container:start
[info] starting server ...
[success] Total time: 0 s, completed Mar 3, 2016 9:52:25 PM
Error: Could not find or load main class
>
我不清楚sbt 是如何找到Lift 的主类的。我查看了很多旧版本的sbt 配置,它们有所不同,因为早期版本使用的是早期版本的 xsbt 插件。 (具体来说,你会看到像 seq(webSettings :_*) 这样的东西——这还能做什么?)我提取了最新版本的 jetty-webapp 和 jetty-plus,所以我认为这不是问题所在。另一方面,这些配置都没有说明 Lift 如何确定 Boot.scala 的位置,反过来我不确定如何编写配置以使其知道如何引导框架。
两个来源之间的一个主要区别是新的 Jetty README 配置了 servlet like this:
libraryDependencies += "javax.servlet" % "javax.servlet-api" % "3.0.1" % "provided"
enablePlugins(JettyPlugin)
containerLibs in Jetty := Seq("org.eclipse.jetty" % "jetty-runner" % "9.2.1.v20140609" intransitive())
containerMain in Jetty := "org.eclipse.jetty.runner.Runner"
这似乎在Jetty插件上配置了SettingKey,并指向Jetty runner以启动servlet。但是,鉴于我不是通过标准 servlet 运行,而是通过配置为指向 web.xml 中的 Lift 应用程序的过滤器,这似乎是我应该删除的东西。
显然我误解了一些东西。我如何诊断为什么 xsbt-web-plugin 没有使用 Lift 框架?似乎要么我找不到按惯例配置,要么我需要对 Jetty 做一些特别的事情来指向web.xml 过滤器。任何人都可以帮助澄清如何诊断这一点,或阐明这两个库应该如何协同工作?
【问题讨论】:
-
如果我没记错的话,Jetty 是在寻找
jetty-web.xml而不是web.xml,除非你通过代码重新配置它?已经有一段时间了。 -
我认为这个旧项目可以在 Jetty 上运行,就像您需要的那样:github.com/izmailoff/lift_authentication_starter。在此处检查 xml 文件:github.com/dahdahm/lift_authentication_starter/tree/master/src/…。我不确定它是否还能编译,但你可能会找到你需要的东西。
-
@AlekseyIzmailov 我已经确认如果使用简单的 servlet,它可以与
web.xml一起使用,但不适用于 Lift。你有链接re:jetty.xml吗?xsbt-web-plugin的文档中提到了它,但作为一个“附加组件”,所以似乎没有具体的理由走这条路。 -
@AlekseyIzmailov 引用的存储库位于 Jetty 8(不是 9.2.1)和 Lift 2(而不是 3)上。特别是
webSettings位似乎在后来的插件版本中消失了。