使用xsbt-web-plugin配置Lift:查找主方法类

时间:2016-03-04 06:35:52

标签: scala sbt 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")

我直接从上面链接的食谱中提取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-webappjetty-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运行器启动servlet。但是,鉴于我没有运行标准servlet,而是通过配置为指向web.xml中的Lift应用程序的过滤器,这似乎是我应该删除的内容。

显然,我误解了一些事情。如何诊断xsbt-web-plugin未取起Lift框架的原因?似乎有一个按惯例配置我无法找到或者我需要对Jetty执行一些特殊操作以指向web.xml过滤器。任何人都可以帮助澄清如何诊断,或阐明两个库应如何协同工作?

1 个答案:

答案 0 :(得分:0)

build.sbt(而不是jetty:start)执行时,以下container:start最终为我工作。似乎net.liftweb需要包含libraryDependency而不是containerLibs,并且Jetty插件管理容器。但是,我不明白,将来会有什么区别或如何诊断它(最后只是尝试了很多不同的事情)。

值得注意的是,如果将Boot.scala文件设置为使用提升过滤器,则web.xml类提升会自动获取。

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"

//logLevel := Level.Debug

enablePlugins(JettyPlugin)

libraryDependencies ++= {
  val liftVersion = "3.0-M8"
  Seq(
    "net.liftweb" %% "lift-webkit" % liftVersion % "compile"
  )
}

containerLibs in Jetty := {
  val liftVersion = "3.0-M8"
  Seq(
    "org.eclipse.jetty" % "jetty-webapp" % "9.2.1.v20140609",
    "org.eclipse.jetty" % "jetty-plus"   % "9.2.1.v20140609",
    "org.eclipse.jetty" % "jetty-runner" % "9.2.1.v20140609" intransitive()
  )
}

containerMain in Jetty := "org.eclipse.jetty.runner.Runner"