Java.lang.NoSuchMethodError: akka.actor.ActorCell.addFunctionRef

I am trying to set up a simple akka-http 2.4.2 project to test it, but I cannot do this.

My built.sbt:

import NativePackagerHelper._

lazy val akkaVersion = "2.4.2"

lazy val root = (project in file(".")).
settings(
name := "akkTest",
version := "0.1",
scalaVersion := "2.11.7")

libraryDependencies ++= Seq(
"com.typesafe.akka" %% "akka-actor" % akkaVersion,
"com.typesafe.akka" %% "akka-http-spray-json-experimental" % akkaVersion
)

enablePlugins(JavaServerAppPackaging)

my code snippet in Main.scala

import akka.http.scaladsl.Http
import akka.stream.ActorMaterializer
import akka.stream.scaladsl._
import akka.actor.ActorSystem


object Main extends App {

implicit val system = ActorSystem()
implicit val materializer = ActorMaterializer()
implicit val ec = system.dispatcher

val serverSource =
    Http().bind(interface = "localhost", port = 8080)
val bindingFuture =
    serverSource.to(Sink.foreach { connection => // foreach materializes the source
    println("Accepted new connection from " + connection.remoteAddress)
    }).run()

}

Error while throwing:

Uncaught error from thread [default-akka.actor.default-dispatcher-2] shutting down JVM since 'akka.jvm-exit-on-fatal-error' is enabled for ActorSystem[default]
java.lang.NoSuchMethodError: akka.actor.ActorCell.addFunctionRef(Lscala/Function2;)Lakka/actor/FunctionRef;
        at akka.stream.stage.GraphStageLogic$StageActor.<init>(GraphStage.scala:143)
        at akka.stream.stage.GraphStageLogic.getStageActor(GraphStage.scala:904)
        at akka.stream.impl.io.ConnectionSourceStage$$anon$1.preStart(TcpStages.scala:56)
        at akka.stream.impl.fusing.GraphInterpreter.init(GraphInterpreter.scala:468)
        at akka.stream.impl.fusing.GraphInterpreterShell.init(ActorGraphInterpreter.scala:363)
        at akka.stream.impl.fusing.ActorGraphInterpreter.tryInit(ActorGraphInterpreter.scala:502)
        at akka.stream.impl.fusing.ActorGraphInterpreter.preStart(ActorGraphInterpreter.scala:539)
        at akka.actor.Actor$class.aroundPreStart(Actor.scala:472)
        at akka.stream.impl.fusing.ActorGraphInterpreter.aroundPreStart(ActorGraphInterpreter.scala:493)
        at akka.actor.ActorCell.create(ActorCell.scala:580)
        at akka.actor.ActorCell.invokeAll$1(ActorCell.scala:456)
        at akka.actor.ActorCell.systemInvoke(ActorCell.scala:478)
        at akka.dispatch.Mailbox.processAllSystemMessages(Mailbox.scala:279)
        at akka.dispatch.Mailbox.run(Mailbox.scala:220)
        at akka.dispatch.Mailbox.exec(Mailbox.scala:231)
        at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)
        at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339)
        at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)
        at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)

It should be something in my environment, but I don't know how to track the problem. I am using jdk 1.8u71

[info] Done updating.
[info] Including from cache: ssl-config-akka_2.11-0.1.3.jar
[info] Including from cache: reactive-streams-1.0.0.jar
[info] Including from cache: akka-http-spray-json-experimental_2.11-2.4.2.jar
[info] Including from cache: config-1.3.0.jar
[info] Including from cache: spray-json_2.11-1.3.2.jar
[info] Including from cache: ssl-config-core_2.11-0.1.3.jar
[info] Including from cache: scala-parser-combinators_2.11-1.0.4.jar
[info] Including from cache: scala-java8-compat_2.11-0.7.0.jar
[info] Including from cache: akka-parsing_2.11-2.4.2.jar
[info] Including from cache: akka-http-experimental_2.11-2.4.2.jar
[info] Including from cache: akka-actor_2.11-2.4.2.jar
[info] Including from cache: akka-http-core_2.11-2.4.2.jar
[info] Including from cache: akka-stream_2.11-2.4.2.jar
[info] Including from cache: scala-library-2.11.7.jar

Remember that I only point to dependencies of the same version of akka

This program works fine when using sbt run , but it fails when using the assembled jar with my own scala launcher program

+3
source share
5 answers

, Spark Akka . Spark Job (, sbt run), , Akka. , spark-submit. Spark Akka Akka sparkJob.jar. , NoSuchMethodError akka-stream_2.11-2.4.2, akka-actor_2.11-2.3.x.jar, Spark akka-actor_2.11-2.4.2.jar, . addFunctionRef Akka. , , ( ). GraphStage,

materializer.supervsor.getClass().getResource("ActorCell.class")

ActorCell.

, Akka, Spark , --driver-class-path spark-submit,

spark-submit --class MyJob \
  --driver-class-path akka-actor_2.11-2.4.2.jar \
  --master spark://master:7077 \
  sparkJob.jar

, akka-actor "test, provided" build.sbt, akka-actor sparkJob.jar.

+4

, , akka-actor. , , , , -.

+1

Scala 2.11 -. Scala . Spark , Jar.

scala akka jar lib. Spark -- SQLContext

- , (, Scala -)

https://github.com/sbt/sbt-assembly/issues/204

+1

, sbt run. akka-stream build.sbt, :

  "com.typesafe.akka" %% "akka-stream" % "2.5.3",
  "com.typesafe.akka" %% "akka-stream-testkit" % "2.5.3" % Test
0

akka-http-experimental-2.4.11.2 akka-actor-2.5.6.

dependencies {
    compile group: 'org.scala-lang', name: 'scala-library', version: '2.11.11'
    compile group: 'com.typesafe.akka', name: 'akka-actor_2.11', version: '2.5.6'

    compile group: 'com.typesafe.akka', name: 'akka-http-experimental_2.11', version: '2.4.11.2'
}

, akka-http-experimental-2.4.11.2 com.typesafe.akka:akka-actor:2.4.11.2., 2.5.6.

./gradlew dependencies

compileClasspath - Compile classpath for source set 'main'.
+--- org.scala-lang:scala-library:2.11.11
+--- com.typesafe.akka:akka-actor_2.11:2.5.6
|    +--- org.scala-lang:scala-library:2.11.11
|    +--- com.typesafe:config:1.3.1
|    \--- org.scala-lang.modules:scala-java8-compat_2.11:0.7.0
|         \--- org.scala-lang:scala-library:2.11.7 -> 2.11.11
+--- com.typesafe.akka:akka-http-experimental_2.11:2.4.11.2
|    +--- org.scala-lang:scala-library:2.11.8 -> 2.11.11
|    \--- com.typesafe.akka:akka-http-core_2.11:2.4.11.2
|         +--- org.scala-lang:scala-library:2.11.8 -> 2.11.11
|         +--- com.typesafe.akka:akka-stream_2.11:2.4.11.2
|         |    +--- org.scala-lang:scala-library:2.11.8 -> 2.11.11
|         |    +--- com.typesafe.akka:akka-actor_2.11:2.4.11.2 -> 2.5.6 (*)  <---- Ting
|         |    +--- com.typesafe:ssl-config-akka_2.11:0.2.1
|         |    |    +--- org.scala-lang:scala-library:2.11.8 -> 2.11.11
|         |    |    \--- com.typesafe:ssl-config-core_2.11:0.2.1
|         |    |         +--- org.scala-lang:scala-library:2.11.8 -> 2.11.11
|         |    |         +--- com.typesafe:config:1.2.0 -> 1.3.1
|         |    |         \--- org.scala-lang.modules:scala-parser-combinators_2.11:1.0.4
|         |    |              \--- org.scala-lang:scala-library:2.11.6 -> 2.11.11
|         |    \--- org.reactivestreams:reactive-streams:1.0.0
|         \--- com.typesafe.akka:akka-parsing_2.11:2.4.11.2
|              \--- org.scala-lang:scala-library:2.11.8 -> 2.11.11
\--- org.codehaus.groovy:groovy-all:2.4.12

(*) - dependencies omitted (listed previously)

1) akka-actor 2.4.11, .

dependencies {
    compile group: 'org.scala-lang', name: 'scala-library', version: '2.11.11'
    compile group: 'com.typesafe.akka', name: 'akka-actor_2.11', version: '2.4.11'
    compile group: 'com.typesafe.akka', name: 'akka-http-experimental_2.11', version: '2.4.11.2'
}

2) Another way is excludeunwanted akka_actorand explicitly add the desired.

dependencies {
    compile group: 'org.scala-lang', name: 'scala-library', version: '2.11.11'
    compile group: 'com.typesafe.akka', name: 'akka-actor_2.11', version: '2.5.6'
    compile group: 'com.typesafe.akka', name: 'akka-http-experimental_2.11', version: '2.4.11.2' {
       exclude group: "com.typesafe.akka", module: "akka-actor_2.11"         // <- exlude actor 2.4.11.2
    }
}
0
source

Source: https://habr.com/ru/post/1653542/


All Articles