Question

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.URLClassLoader$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!

Was it helpful?

Solution

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"
)

OTHER TIPS

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

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top