【发布时间】:2018-01-22 04:58:56
【问题描述】:
我正在尝试在 scala 中使用 akka api 创建一个 Http-server,但我得到了 NoClassDefFoundError。
我检查了Akka-Http 2.4.9 throws java.lang.NoClassDefFoundError: akka/actor/ActorRefFactory exception 和 Akka-Http 2.4.9 throws java.lang.NoClassDefFoundError: akka/actor/ActorRefFactory exception
但我无法将它们与我的案例联系起来。
/usr/lib/jvm/default-runtime/bin/java ...
Exception in thread "main" java.lang.NoClassDefFoundError: akka/actor/ActorRefFactory
at main.scala.Main.main(main.scala)
Caused by: java.lang.ClassNotFoundException: akka.actor.ActorRefFactory
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 1 more
这是我的 scala 代码,
package main.scala
import akka.actor.ActorSystem
import akka.http.scaladsl.Http
import akka.http.scaladsl.model._
import akka.http.scaladsl.server.Directives._
import akka.stream.ActorMaterializer
import scala.io.StdIn
object Main{
def main(args: Array[String]): Unit = {
implicit val system = ActorSystem("my-system")
implicit val materializer = ActorMaterializer()
implicit val executionContext = system.dispatcher
val route =
path("hello") {
get {
complete(HttpEntity(ContentTypes.`text/html(UTF-8)`, "<h1>Say hello to akka-http</h1>"))
}
}
val bindingFuture = Http().bindAndHandle(route, "localhost", 8080)
println(s"Server online at http://localhost:8080/\nPress RETURN to stop...")
StdIn.readLine()
bindingFuture
.flatMap(_.unbind())
.onComplete(_ => system.terminate())
}
}
这是我的build.sbt,如果有帮助的话。
name := "aiengine"
version := "0.1"
scalaVersion := "2.11.4"
libraryDependencies ++= {
val sparkVer = "2.1.0"
Seq(
"org.apache.spark" %% "spark-core" % sparkVer % "provided" withSources(),
"com.typesafe.akka" %% "akka-http" % "10.1.0-RC1" % "provided" withSources(),
"com.typesafe.akka" %% "akka-stream" % "2.5.9" % "provided" withSources()
)
}
【问题讨论】:
-
为什么将依赖项标记为“已提供”?如果您这样做,则假定这些依赖项是由托管您的应用程序的某些“容器”在运行时提供的,例如网络服务器 。我不确定你是否真的这样做。所以我建议删除所有“提供”的标记。这应该可以解决问题。
-
谢谢,@igorpcholkin 解决了我的问题,我是 scala 的新手,我关注了hortonworks.com/tutorial/…,其中 sbt 文件以这种方式配置。
标签: scala noclassdeffounderror akka-http