2015-06-19 70 views
4

我是新來噴,我不能得到它的工作...:/噴霧可以NoClassDefFoundError的

我build.sbt:

val apacheDeps = Seq(
    "commons-validator" % "commons-validator" % "1.4.1" 
) 

val sprayAndAkkaDeps = { 
    val sprayV = "1.3.3" 
    Seq(
    "io.spray"   %% "spray-can"  % sprayV, 
    "io.spray"   %% "spray-routing" % sprayV, 
    "io.spray"   %% "spray-testkit" % sprayV % "test", 
    "com.typesafe.akka" %% "akka-actor" % "2.3.9" 
) 
} 

name := "myApp" 
version := "1.0.0" 
scalaVersion := "2.11.6" 

libraryDependencies ++= Seq(
    "org.mongodb" %% "casbah" % "2.8.1", 
    "ch.qos.logback" % "logback-classic" % "1.1.2", 
    "org.scala-lang.modules" %% "scala-xml" % "1.0.3", 
    "com.typesafe.play" %% "play-json" % "2.4.0", 
    "org.specs2" %% "specs2-core" % "3.6.1" % "test", 
    "com.netaporter" %% "scala-uri" % "0.4.7" 
) ++ apacheDeps ++ sprayAndAkkaDeps 

Revolver.settings 

我的主要目標:

import akka.actor._ 
import akka.io.IO 
import akka.pattern.ask 
import spray.can.Http 
import akka.util.Timeout 
import scala.concurrent.duration._ 

object Main extends App { 

    implicit val timeout = new Timeout(5.seconds) 

    implicit val system = ActorSystem("acontextGen") 

    val listener = system.actorOf(Props[listeners.MyHttpListener], "httpListener") 

    IO(Http) ? Http.Bind(listener, interface = "localhost", port = 7777) 

} 

我的聽衆:

package listeners 

import spray.routing._ 

class MyHttpListener extends HttpServiceActor { 

    def receive = runRoute { 

    path("hi") { 
     get { 
     complete("hello") 
     } 
    } 

    } 

} 

而且問題。當我運行我得到這個輸出和服務器不上7777端口開始

> gen[ERROR] Uncaught error from thread [acontextGen-akka.actor.default-dispatcher-2] shutting down JVM since 'akka.jvm-exit-on-fatal-error' is enabled for ActorSystem[acontextGen] 
gen[ERROR] java.lang.NoClassDefFoundError: shapeless/PrependAux$ 
gen[ERROR]  at spray.routing.directives.PathDirectives$class.pathPrefix(PathDirectives.scala:40) 
gen[ERROR]  at spray.routing.HttpServiceActor.pathPrefix(HttpService.scala:96) 
gen[ERROR]  at spray.routing.directives.PathDirectives$class.path(PathDirectives.scala:33) 
gen[ERROR]  at spray.routing.HttpServiceActor.path(HttpService.scala:96) 
gen[ERROR]  at listeners.MyHttpListener.receive(MyHttpListener.scala:9) 
gen[ERROR]  at akka.actor.ActorCell.newActor(ActorCell.scala:558) 
gen[ERROR]  at akka.actor.ActorCell.create(ActorCell.scala:578) 
gen[ERROR]  at akka.actor.ActorCell.invokeAll$1(ActorCell.scala:456) 
gen[ERROR]  at akka.actor.ActorCell.systemInvoke(ActorCell.scala:478) 
gen[ERROR]  at akka.dispatch.Mailbox.processAllSystemMessages(Mailbox.scala:279) 
gen [ERROR] [06/19/2015 18:41:00.089] [acontextGen-akka.actor.default-dispatcher-2] [ActorSystem(acontextGen)] Uncaught error from thread [acontextGen-akka.actor.default-dispatcher-2] shutting down JVM since 'akka.jvm-exit-on-fatal-error' is enabled 
gen java.lang.NoClassDefFoundError: shapeless/PrependAux$ 
gen  at spray.routing.directives.PathDirectives$class.pathPrefix(PathDirectives.scala:40) 
gen  at spray.routing.HttpServiceActor.pathPrefix(HttpService.scala:96) 
gen  at spray.routing.directives.PathDirectives$class.path(PathDirectives.scala:33) 
gen  at spray.routing.HttpServiceActor.path(HttpService.scala:96) 
gen  at listeners.MyHttpListener.receive(MyHttpListener.scala:9) 
gen  at akka.actor.ActorCell.newActor(ActorCell.scala:558) 
gen  at akka.actor.ActorCell.create(ActorCell.scala:578) 
gen  at akka.actor.ActorCell.invokeAll$1(ActorCell.scala:456) 
gen  at akka.actor.ActorCell.systemInvoke(ActorCell.scala:478) 
gen  at akka.dispatch.Mailbox.processAllSystemMessages(Mailbox.scala:279) 
gen  at akka.dispatch.Mailbox.run(Mailbox.scala:220) 
gen  at akka.dispatch.Mailbox.exec(Mailbox.scala:231) 
gen  at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260) 
gen  at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.pollAndExecAll(ForkJoinPool.java:1253) 
gen  at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1346) 
gen  at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979) 
gen  at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107) 
gen Caused by: java.lang.ClassNotFoundException: shapeless.PrependAux$ 
gen  at java.net.URLClassLoader$1.run(URLClassLoader.java:372) 
gen  at java.net.URLClassLoader$1.run(URLClassLoader.java:361) 
gen  at java.security.AccessController.doPrivileged(Native Method) 
gen  at java.net.URLClassLoader.findClass(URLClassLoader.java:360) 
gen  at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
gen  at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
gen  ... 17 more 
gen 
gen[ERROR]  at akka.dispatch.Mailbox.run(Mailbox.scala:220) 
gen[ERROR]  at akka.dispatch.Mailbox.exec(Mailbox.scala:231) 
gen[ERROR]  at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260) 
gen[ERROR]  at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.pollAndExecAll(ForkJoinPool.java:1253) 
gen[ERROR]  at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1346) 
gen[ERROR]  at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979) 
gen[ERROR]  at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107) 
gen[ERROR] Caused by: java.lang.ClassNotFoundException: shapeless.PrependAux$ 
gen[ERROR]  at java.net.URLClassLoader$1.run(URLClassLoader.java:372) 
gen[ERROR]  at java.net.URLClassLoader$1.run(URLClassLoader.java:361) 
gen[ERROR]  at java.security.AccessController.doPrivileged(Native Method) 
gen[ERROR]  at java.net.URLClassLoader.findClass(URLClassLoader.java:360) 
gen[ERROR]  at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
gen[ERROR]  at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
gen[ERROR]  ... 17 more 
gen ... finished with exit code 255 

你能解釋我什麼我做錯了什麼? 我按照這個例子:https://github.com/spray/spray-template/tree/on_spray-can_1.3這工作雖然

> show externalDependencyClasspath 
[info] List(Attributed(/home/user256/.ivy2/cache/org.scala-lang/scala-library/jars/scala-library-2.11.6.jar), Attributed(/home/user256/.ivy2/cache/org.mongodb/casbah-commons_2.11/jars/casbah-commons_2.11-2.8.1.jar), Attributed(/home/user256/.ivy2/cache/com.github.nscala-time/nscala-time_2.11/jars/nscala-time_2.11-1.0.0.jar), Attributed(/home/user256/.ivy2/cache/org.mongodb/mongo-java-driver/jars/mongo-java-driver-2.13.1.jar), Attributed(/home/user256/.ivy2/cache/org.mongodb/casbah-core_2.11/jars/casbah-core_2.11-2.8.1.jar), Attributed(/home/user256/.ivy2/cache/org.mongodb/casbah-query_2.11/jars/casbah-query_2.11-2.8.1.jar), Attributed(/home/user256/.ivy2/cache/org.mongodb/casbah-gridfs_2.11/jars/casbah-gridfs_2.11-2.8.1.jar), Attributed(/home/user256/.ivy2/cache/ch.qos.logback/logback-classic/jars/logback-classic-1.1.2.jar), Attributed(/home/user256/.ivy2/cache/ch.qos.logback/logback-core/jars/logback-core-1.1.2.jar), Attributed(/home/user256/.ivy2/cache/org.slf4j/slf4j-api/jars/slf4j-api-1.7.6.jar), Attributed(/home/user256/.ivy2/cache/org.scala-lang.modules/scala-xml_2.11/bundles/scala-xml_2.11-1.0.3.jar), Attributed(/home/user256/.ivy2/cache/com.typesafe.play/play-json_2.11/jars/play-json_2.11-2.4.0.jar), Attributed(/home/user256/.ivy2/cache/com.typesafe.play/play-iteratees_2.11/jars/play-iteratees_2.11-2.4.0.jar), Attributed(/home/user256/.ivy2/cache/org.scala-stm/scala-stm_2.11/jars/scala-stm_2.11-0.7.jar), Attributed(/home/user256/.ivy2/cache/com.typesafe/config/bundles/config-1.3.0.jar), Attributed(/home/user256/.ivy2/cache/com.typesafe.play/play-functional_2.11/jars/play-functional_2.11-2.4.0.jar), Attributed(/home/user256/.ivy2/cache/com.typesafe.play/play-datacommons_2.11/jars/play-datacommons_2.11-2.4.0.jar), Attributed(/home/user256/.ivy2/cache/joda-time/joda-time/jars/joda-time-2.7.jar), Attributed(/home/user256/.ivy2/cache/org.joda/joda-convert/jars/joda-convert-1.7.jar), Attributed(/home/user256/.ivy2/cache/org.scala-lang/scala-reflect/jars/scala-reflect-2.11.6.jar), Attributed(/home/user256/.ivy2/cache/com.fasterxml.jackson.core/jackson-core/bundles/jackson-core-2.5.3.jar), Attributed(/home/user256/.ivy2/cache/com.fasterxml.jackson.core/jackson-annotations/bundles/jackson-annotations-2.5.3.jar), Attributed(/home/user256/.ivy2/cache/com.fasterxml.jackson.core/jackson-databind/bundles/jackson-databind-2.5.3.jar), Attributed(/home/user256/.ivy2/cache/com.fasterxml.jackson.datatype/jackson-datatype-jdk8/bundles/jackson-datatype-jdk8-2.5.3.jar), Attributed(/home/user256/.ivy2/cache/com.fasterxml.jackson.datatype/jackson-datatype-jsr310/bundles/jackson-datatype-jsr310-2.5.3.jar), Attributed(/home/user256/.ivy2/cache/com.netaporter/scala-uri_2.11/jars/scala-uri_2.11-0.4.7.jar), Attributed(/home/user256/.ivy2/cache/org.parboiled/parboiled_2.11/jars/parboiled_2.11-2.0.1.jar), Attributed(/home/user256/.ivy2/cache/commons-validator/commons-validator/jars/commons-validator-1.4.1.jar), Attributed(/home/user256/.ivy2/cache/commons-beanutils/commons-beanutils/jars/commons-beanutils-1.8.3.jar), Attributed(/home/user256/.ivy2/cache/commons-logging/commons-logging/jars/commons-logging-1.2.jar), Attributed(/home/user256/.ivy2/cache/commons-digester/commons-digester/jars/commons-digester-1.8.1.jar), Attributed(/home/user256/.ivy2/cache/commons-collections/commons-collections/jars/commons-collections-3.2.1.jar), Attributed(/home/user256/.ivy2/cache/io.spray/spray-can_2.11/bundles/spray-can_2.11-1.3.3.jar), Attributed(/home/user256/.ivy2/cache/io.spray/spray-io_2.11/bundles/spray-io_2.11-1.3.3.jar), Attributed(/home/user256/.ivy2/cache/io.spray/spray-util_2.11/bundles/spray-util_2.11-1.3.3.jar), Attributed(/home/user256/.ivy2/cache/io.spray/spray-http_2.11/bundles/spray-http_2.11-1.3.3.jar), Attributed(/home/user256/.ivy2/cache/org.parboiled/parboiled-scala_2.11/jars/parboiled-scala_2.11-1.1.7.jar), Attributed(/home/user256/.ivy2/cache/org.parboiled/parboiled-core/jars/parboiled-core-1.1.7.jar), Attributed(/home/user256/.ivy2/cache/io.spray/spray-routing-shapeless2_2.11/bundles/spray-routing-shapeless2_2.11-1.3.3.jar), Attributed(/home/user256/.ivy2/cache/io.spray/spray-httpx_2.11/bundles/spray-httpx_2.11-1.3.3.jar), Attributed(/home/user256/.ivy2/cache/org.jvnet.mimepull/mimepull/jars/mimepull-1.9.5.jar), Attributed(/home/user256/.ivy2/cache/com.chuusai/shapeless_2.11/bundles/shapeless_2.11-2.1.0.jar), Attributed(/home/user256/.ivy2/cache/com.typesafe.akka/akka-actor_2.11/jars/akka-actor_2.11-2.3.9.jar)) 
+1

您的其他依賴項之一可能取決於與噴霧路由不兼容的無形的版本。你可以在sbt中顯示運行'show externalDependencyClasspath'的輸出嗎?更好的是使用'sbt-dependency-graph'的輸出。假設某些東西需要無定形2,您也可以直接嘗試使用'spray-routing-shapeless2'而不是'spray-routing'。 – jrudolph

+0

我試圖運行sbt-dependency-graph --force,但它需要很長時間,所以我可以顯示第一個命令輸出(附在問題末尾) –

+0

使用spray-routing-shapeless2替換噴霧路徑幫助了我!非常感謝!我不喜歡使用我不明白的東西,但現在可以:) –

回答

6

的原因是無形1.x和2.x的不成形不兼容。但是,如果混合取決於兩個版本的無形狀態依賴關係管理器的依賴項,則默認情況下只會驅逐舊版本。這就是在這裏發生的事情:

> dependencyTree 
myapp:myapp_2.11:1.0.0 [S] 
    +-com.netaporter:scala-uri_2.11:0.4.7 [S] 
    | +-org.parboiled:parboiled_2.11:2.0.1 [S] 
    | +-com.chuusai:shapeless_2.11:2.0.0 [S] 
    | 
    +-io.spray:spray-routing_2.11:1.3.3 [S] 
    | +-com.chuusai:shapeless_2.11:1.2.4 (evicted by: 2.0.0) 
    | +-io.spray:spray-http_2.11:1.3.3 [S] 
    | | +-io.spray:spray-util_2.11:1.3.3 [S] 
    | | +-org.parboiled:parboiled-scala_2.11:1.1.7 [S] 
    | | +-org.parboiled:parboiled-core:1.1.7 
    | | ... 

spray-routing仍取決於shapeless 1.x的同時scala-uri依靠parboiled2取決於shapeless 2.x的

解決方案是使用spray-routing-shapeless2模塊,該模塊專門用於幫助解決這類問題。

+0

謝謝你的解釋! –