I'm trying to use the SBT with the xsbt-web-plugin. Followed the instructions on the projects website but continue to get the following (sorry for the length)
sbt.JettyRunException: Jetty and its dependencies must be on the jetty classpath
at sbt.JettyRunner.runError(WebApp.scala:72)
at sbt.JettyRunner.apply(WebApp.scala:62)
at com.github.siasia.WebPlugin$.jettyRunAction(WebPlugin.scala:129)
at com.github.siasia.WebPlugin$$anonfun$jettyRunAction$1.apply(WebPlugin.scala:133)
at com.github.siasia.WebPlugin$$anonfun$jettyRunAction$1.apply(WebPlugin.scala:133)
at com.github.siasia.WebPlugin$.withCurrentRef(WebPlugin.scala:138)
at com.github.siasia.WebPlugin$.jettyRunAction(WebPlugin.scala:133)
at com.github.siasia.WebPlugin$$anonfun$10.apply(WebPlugin.scala:141)
at com.github.siasia.WebPlugin$$anonfun$10.apply(WebPlugin.scala:141)
at sbt.Command$$anonfun$command$1$$anonfun$apply$1.apply(Command.scala:33)
at sbt.Command$$anonfun$command$1$$anonfun$apply$1.apply(Command.scala:33)
at sbt.Command$.process(Command.scala:91)
at sbt.MainLoop$$anonfun$next$1$$anonfun$apply$1.apply(Main.scala:86)
at sbt.MainLoop$$anonfun$next$1$$anonfun$apply$1.apply(Main.scala:86)
at sbt.State$$anon$1.process(State.scala:60)
at sbt.MainLoop$$anonfun$next$1.apply(Main.scala:86)
at sbt.MainLoop$$anonfun$next$1.apply(Main.scala:86)
at sbt.ErrorHandling$.wideConvert(ErrorHandling.scala:13)
at sbt.MainLoop$.next(Main.scala:86)
at sbt.MainLoop$.run(Main.scala:81)
at sbt.MainLoop$$anonfun$runLogged$1.apply(Main.scala:75)
at sbt.MainLoop$$anonfun$runLogged$1.apply(Main.scala:72)
at sbt.Using.apply(Using.scala:25)
at sbt.MainLoop$.runLogged(Main.scala:72)
at sbt.MainLoop$.runLogged(Main.scala:62)
at sbt.xMain.run(Main.scala:33)
at xsbt.boot.Launch$.run(Launch.scala:54)
at xsbt.boot.Launch$$anonfun$explicit$1.apply(Launch.scala:43)
at xsbt.boot.Launch$.launch(Launch.scala:68)
at xsbt.boot.Launch$.apply(Launch.scala:14)
at xsbt.boot.Boot$.runImpl(Boot.scala:24)
at xsbt.boot.Boot$.main(Boot.scala:15)
at xsbt.boot.Boot.main(Boot.scala)
Caused by: java.lang.NoClassDefFoundError: org/eclipse/jetty/webapp/WebAppClassLoader
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:247)
at sbt.ModuleUtilities$.getObject(ModuleUtilities.scala:10)
at sbt.JettyRunner.createRunner$1(WebApp.scala:45)
at sbt.JettyRunner.runJetty$1(WebApp.scala:47)
at sbt.JettyRunner.apply(WebApp.scala:57)
at com.github.siasia.WebPlugin$.jettyRunAction(WebPlugin.scala:129)
at com.github.siasia.WebPlugin$$anonfun$jettyRunAction$1.apply(WebPlugin.scala:133)
at com.github.siasia.WebPlugin$$anonfun$jettyRunAction$1.apply(WebPlugin.scala:133)
at com.github.siasia.WebPlugin$.withCurrentRef(WebPlugin.scala:138)
at com.github.siasia.WebPlugin$.jettyRunAction(WebPlugin.scala:133)
at com.github.siasia.WebPlugin$$anonfun$10.apply(WebPlugin.scala:141)
at com.github.siasia.WebPlugin$$anonfun$10.apply(WebPlugin.scala:141)
at sbt.Command$$anonfun$command$1$$anonfun$apply$1.apply(Command.scala:33)
at sbt.Command$$anonfun$command$1$$anonfun$apply$1.apply(Command.scala:33)
at sbt.Command$.process(Command.scala:91)
at sbt.MainLoop$$anonfun$next$1$$anonfun$apply$1.apply(Main.scala:86)
at sbt.MainLoop$$anonfun$next$1$$anonfun$apply$1.apply(Main.scala:86)
at sbt.State$$anon$1.process(State.scala:60)
at sbt.MainLoop$$anonfun$next$1.apply(Main.scala:86)
at sbt.MainLoop$$anonfun$next$1.apply(Main.scala:86)
at sbt.ErrorHandling$.wideConvert(ErrorHandling.scala:13)
at sbt.MainLoop$.next(Main.scala:86)
at sbt.MainLoop$.run(Main.scala:81)
at sbt.MainLoop$$anonfun$runLogged$1.apply(Main.scala:75)
at sbt.MainLoop$$anonfun$runLogged$1.apply(Main.scala:72)
at sbt.Using.apply(Using.scala:25)
at sbt.MainLoop$.runLogged(Main.scala:72)
at sbt.MainLoop$.runLogged(Main.scala:62)
at sbt.xMain.run(Main.scala:33)
at xsbt.boot.Launch$.run(Launch.scala:54)
at xsbt.boot.Launch$$anonfun$explicit$1.apply(Launch.scala:43)
at xsbt.boot.Launch$.launch(Launch.scala:68)
at xsbt.boot.Launch$.apply(Launch.scala:14)
at xsbt.boot.Boot$.runImpl(Boot.scala:24)
at xsbt.boot.Boot$.main(Boot.scala:15)
at xsbt.boot.Boot.main(Boot.scala)
Caused by: java.lang.ClassNotFoundException: org.eclipse.jetty.webapp.WebAppClassLoader
at java.net.URLClas开发者_运维知识库sLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at sbt.classpath.DualLoader.loadClass(DualLoader.scala:29)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at sbt.classpath.LazyFrameworkLoader.doLoadClass(ClassLoaders.scala:122)
at sbt.classpath.LoaderBase.loadClass(ClassLoaders.scala:21)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:247)
at sbt.ModuleUtilities$.getObject(ModuleUtilities.scala:10)
at sbt.JettyRunner.createRunner$1(WebApp.scala:45)
at sbt.JettyRunner.runJetty$1(WebApp.scala:47)
at sbt.JettyRunner.apply(WebApp.scala:57)
at com.github.siasia.WebPlugin$.jettyRunAction(WebPlugin.scala:129)
at com.github.siasia.WebPlugin$$anonfun$jettyRunAction$1.apply(WebPlugin.scala:133)
at com.github.siasia.WebPlugin$$anonfun$jettyRunAction$1.apply(WebPlugin.scala:133)
at com.github.siasia.WebPlugin$.withCurrentRef(WebPlugin.scala:138)
at com.github.siasia.WebPlugin$.jettyRunAction(WebPlugin.scala:133)
at com.github.siasia.WebPlugin$$anonfun$10.apply(WebPlugin.scala:141)
at com.github.siasia.WebPlugin$$anonfun$10.apply(WebPlugin.scala:141)
at sbt.Command$$anonfun$command$1$$anonfun$apply$1.apply(Command.scala:33)
at sbt.Command$$anonfun$command$1$$anonfun$apply$1.apply(Command.scala:33)
at sbt.Command$.process(Command.scala:91)
at sbt.MainLoop$$anonfun$next$1$$anonfun$apply$1.apply(Main.scala:86)
at sbt.MainLoop$$anonfun$next$1$$anonfun$apply$1.apply(Main.scala:86)
at sbt.State$$anon$1.process(State.scala:60)
at sbt.MainLoop$$anonfun$next$1.apply(Main.scala:86)
at sbt.MainLoop$$anonfun$next$1.apply(Main.scala:86)
at sbt.ErrorHandling$.wideConvert(ErrorHandling.scala:13)
at sbt.MainLoop$.next(Main.scala:86)
at sbt.MainLoop$.run(Main.scala:81)
at sbt.MainLoop$$anonfun$runLogged$1.apply(Main.scala:75)
at sbt.MainLoop$$anonfun$runLogged$1.apply(Main.scala:72)
at sbt.Using.apply(Using.scala:25)
at sbt.MainLoop$.runLogged(Main.scala:72)
at sbt.MainLoop$.runLogged(Main.scala:62)
at sbt.xMain.run(Main.scala:33)
at xsbt.boot.Launch$.run(Launch.scala:54)
at xsbt.boot.Launch$$anonfun$explicit$1.apply(Launch.scala:43)
at xsbt.boot.Launch$.launch(Launch.scala:68)
at xsbt.boot.Launch$.apply(Launch.scala:14)
at xsbt.boot.Boot$.runImpl(Boot.scala:24)
at xsbt.boot.Boot$.main(Boot.scala:15)
at xsbt.boot.Boot.main(Boot.scala)
[error] sbt.JettyRunException: Jetty and its dependencies must be on the jetty classpath
[error] Use 'last' for the full log.
Here's my config: In project/plugins.sbt:
resolvers += "Web plugin repo" at "http://siasia.github.com/maven2"
addSbtPlugin("com.github.siasia" %% "xsbt-web-plugin" % "0.1.2")
libraryDependencies += "org.eclipse.jetty" % "jetty-server" % "8.0.1.v20110908"
Here's my build.sbt:
name := "Project Manager"
scalaVersion := "2.9.1"
resolvers += "repo.codahale.com" at "http://repo.codahale.com"
libraryDependencies ++= Seq(
"org.scalatra" %% "scalatra" % "2.0.1",
"org.scalatra" %% "scalatra-scalate" % "2.0.1",
"javax.servlet" % "servlet-api" % "2.4",
"org.slf4j" % "slf4j-simple" % "1.6.2",
"postgresql" % "postgresql" % "9.0-801.jdbc4",
"com.codahale" % "jerkson_2.9.1" % "0.4.2",
"org.eclipse.jetty" % "jetty-server" % "8.0.1.v20110908"
)
seq(webSettings :_*)
Any help would be greatly appreciated!
Looks like the author of the plugin has missed adding the Jetty dependency in the Usage section of the documentation. However, if you look in the Running Lift, you'll see that Jetty is an externally required dependency:
libraryDependencies ++= Seq(
"net.liftweb" %% "lift-webkit" % "2.3" % "compile",
"org.mortbay.jetty" % "jetty" % "6.1.22" % "jetty",
"ch.qos.logback" % "logback-classic" % "0.9.26"
)
The issue was actually related to the fact that jetty needs to be a dependency and that jetty 8 isn't yet supported.
The final config looks like this:
name := "Project Manager"
scalaVersion := "2.9.1"
resolvers += "repo.codahale.com" at "http://repo.codahale.com"
libraryDependencies ++= Seq(
"org.scalatra" %% "scalatra" % "2.0.1",
"org.scalatra" %% "scalatra-scalate" % "2.0.1",
"javax.servlet" % "servlet-api" % "2.4",
"org.slf4j" % "slf4j-simple" % "1.6.2",
"postgresql" % "postgresql" % "9.0-801.jdbc4",
"com.codahale" % "jerkson_2.9.1" % "0.4.2",
"org.eclipse.jetty" % "jetty-webapp" % "7.3.0.v20110203" % "jetty" // For Jetty 7
)
seq(webSettings :_*)
Thanks for your help.
Try to copy all the lib and main class to the root directory of your jar/war and set the classpath to lib/*. Make sure lib contains all the jetty jars. This worked for me =>
java -cp myway;"lib/*" mainpackage.main
精彩评论