2016-03-04 17 views
0

我正在嘗試從頭開始創建Lift web應用程序並遇到一些困難。我從xsbt-web-plugin version 2.1開始,並設法使用一個簡單的Jetty servlet。然後我試圖整合來自Lift Cookbook的信息。使用xsbt-web-plugin配置Lift:找到主要方法類

這是我的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是如何打算找到電梯的主類不清楚。我瀏覽了很多舊版本的sbt配置,這些配置有所不同,因爲早期版本使用早期版本的xsbt插件。 (具體來說,你會看到諸如seq(webSettings :_*)之類的東西 - 甚至會做什麼?)我最近的版本是jetty-webappjetty-plus,所以我不認爲這是問題所在。另一方面,這些配置都沒有明確說明Lift如何確定Boot.scala的位置,而我又不確定如何編寫配置以便知道如何引導框架。

兩個源之間的一個主要區別是,新的碼頭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" 

這似乎是配置在碼頭插件中SettingKey,並指向碼頭亞軍揭開序幕servlet的。但是,鑑於我沒有運行標準的servlet,而是通過配置爲指向web.xml中的Lift應用程序的篩選器,這看起來應該是我應該刪除的東西。

顯然我誤解了一些東西。我如何診斷爲什麼xsbt-web-plugin沒有拿起Lift框架?看起來好像是無法找到配置,或者我需要使用Jetty來指定web.xml過濾器。任何人都可以幫助澄清如何診斷這個問題,或者說明兩個庫應該如何一起工作?

+0

如果我沒有記錯,Jetty正在尋找'jetty-web.xml'而不是'web.xml',除非您通過代碼重新配置它。有一陣子了。 –

+0

我認爲這個舊項目就像你需要的那樣在Jetty上運行:https://github。COM/izmailoff/lift_authentication_starter。檢查這裏的xml文件:https://github.com/dahdahm/lift_authentication_starter/tree/master/src/main/webapp/WEB-INF。我不確定它是否仍然編譯,但你可能會發現你需要的。 –

+0

@AlekseyIzmailov如果使用簡單的servlet,我已經確認它可以與'web.xml'一起使用,而不是使用Lift。你有鏈接嗎:'jetty.xml'?它在'xsbt-web-plugin'的文檔中提到,但是作爲'附加組件',所以似乎沒有具體的原因去走這條路。 –

回答

0

以下build.sbtjetty:start(而不是container:start)執行時爲我工作。看來net.liftweb需要包含在libraryDependency中,而不是在containerLibs中,並且Jetty插件管理容器。不過,我不明確,但是,將來有什麼區別或如何診斷(最終只是嘗試很多不同的事情)。

但是,值得注意的是,如果web.xml文件設置爲使用提升過濾器,則Boot.scala類的提升會自動拾取。

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" 
相關問題