首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用xsbt-web-plugin配置Lift :查找main方法类

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

Stack Overflow用户
提问于 2016-03-04 14:35:52
回答 1查看 403关注 0票数 0

我试图“从头开始”创建一个Lift web应用程序,但遇到了一些困难。我从xsbt-web-plugin version 2.1开始,并设法用一个简单的Jetty servlet让它工作。然后,我尝试集成来自Lift Cookbook的信息。

这是我的build.sbt

代码语言:javascript
复制
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

代码语言:javascript
复制
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...

代码语言:javascript
复制
> 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自述文件配置了servlet like this

代码语言:javascript
复制
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过滤器。有没有人可以帮助澄清如何诊断这个问题,或者说明两个库应该如何协同工作?

EN

回答 1

Stack Overflow用户

发布于 2016-03-08 05:19:32

当作为jetty:start (而不是container:start)执行时,下面的build.sbt最终为我工作。看起来net.liftweb需要作为libraryDependency包含,而不是包含在containerLibs中,并且Jetty插件管理容器。不过,我并不特别理解这两者的区别是什么,或者将来如何诊断(最终只是尝试了很多不同的东西)。

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

代码语言:javascript
复制
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"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35789519

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档