NoClassDefFoundError:Scala中的akka/actor/actorRefactory
我试图用scala中的akka api创建一个Http服务器,但是我得到了NoClassDefFoundError:Scala中的akka/actor/actorRefactory,scala,noclassdeffounderror,akka-http,Scala,Noclassdeffounderror,Akka Http,我试图用scala中的akka api创建一个Http服务器,但是我得到了NoClassDefFoundError 我检查了一下 但我不能把它们和我的案子联系起来 /usr/lib/jvm/default-runtime/bin/java ... Exception in thread "main" java.lang.NoClassDefFoundError: akka/actor/ActorRefFactory at main.scala.Main.main(main.scala)
NoClassDefFoundError
我检查了一下
但我不能把它们和我的案子联系起来
/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更新到下面,因为您引用的akka版本似乎很旧
lazy val akkaHttpVersion = "10.0.10"
lazy val akkaVersion = "2.5.4"
lazy val root = (project in file(".")).
settings(
inThisBuild(List(
organization := "com.company-name.application",
scalaVersion := "2.12.3"
)),
name := "aiengine",
libraryDependencies ++= Seq(
"com.typesafe.akka" %% "akka-http" % akkaHttpVersion,
"com.typesafe.akka" %% "akka-http-spray-json" % akkaHttpVersion,
"com.typesafe.akka" %% "akka-stream" % akkaVersion,
"com.typesafe.akka" %% "akka-slf4j" % akkaVersion,
"com.typesafe.akka" %% "akka-http-testkit" % akkaHttpVersion % Test,
"com.typesafe.akka" %% "akka-testkit" % akkaVersion % Test,
"com.typesafe.akka" %% "akka-stream-testkit" % akkaVersion % Test,
"org.scalatest" %% "scalatest" % "3.0.1" % Test
)
)
为什么要将依赖项标记为“已提供”?如果这样做,则假定这些依赖项是由承载应用程序的某个“容器”在运行时提供的,例如web服务器。我不确定你真的这么做了。因此,我建议删除所有“提供的”标记。这应该可以解决问题。谢谢@igorpcholkin解决了我的问题,我是scala的新手,我遵循了sbt文件以这种方式配置的地方。我不认为是从sbt中删除提供的“with sources()解决了我的问题”的版本问题
lazy val akkaHttpVersion = "10.0.10"
lazy val akkaVersion = "2.5.4"
lazy val root = (project in file(".")).
settings(
inThisBuild(List(
organization := "com.company-name.application",
scalaVersion := "2.12.3"
)),
name := "aiengine",
libraryDependencies ++= Seq(
"com.typesafe.akka" %% "akka-http" % akkaHttpVersion,
"com.typesafe.akka" %% "akka-http-spray-json" % akkaHttpVersion,
"com.typesafe.akka" %% "akka-stream" % akkaVersion,
"com.typesafe.akka" %% "akka-slf4j" % akkaVersion,
"com.typesafe.akka" %% "akka-http-testkit" % akkaHttpVersion % Test,
"com.typesafe.akka" %% "akka-testkit" % akkaVersion % Test,
"com.typesafe.akka" %% "akka-stream-testkit" % akkaVersion % Test,
"org.scalatest" %% "scalatest" % "3.0.1" % Test
)
)