Scala声称我正在使用不同版本的Akka

时间:2018-01-21 02:05:49

标签: scala akka

View repository at this specific commit here

我正在组建一个小型SBT项目并学习如何使用akka演员。我能够得到一个只使用akka的简单示例,但是一旦我使用外部库,就会停止工作。我用这个

获得了一个非常大的堆栈跟踪
QtCharts::QChartView

我的依赖关系看起来像这样:

>virtualenv
ImportError: No module named 'virtualenv'
>pip uninstall virtualenv
PermissionError: [Errno 13] Permission denied:

>sudo pip uninstall virtualenv
Successfully uninstalled virtualenv-15.1.0
>pip install virtualenv
Collecting virtualenv

>virtualenv
Options:

我使用this library也使用了akka版本// here I set domain name as domain2所以给出了什么?这个相互矛盾的akka​​演员来自哪里?这是我的objc[15196]: Class JavaLaunchHelper is implemented in both /Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home/bin/java (0x10cc6c4c0) and /Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home/jre/lib/libinstrument.dylib (0x10ccf84e0). One of the two will be used. Which one is undefined. Detected java.lang.NoSuchMethodError error, which MAY be caused by incompatible Akka versions on the classpath. Please note that a given Akka version MUST be the same across all modules of Akka that you are using, e.g. if you use akka-actor [2.5.8 (resolved from current classpath)] all other core Akka modules MUST be of the same version. External projects like Alpakka, Persistence plugins or Akka HTTP etc. have their own version numbers - please make sure you're using a compatible set of libraries. Uncaught error from thread [HelloSystem-akka.actor.default-dispatcher-4]: akka.actor.ActorCell.addFunctionRef(Lscala/Function2;)Lakka/actor/FunctionRef;, shutting down JVM since 'akka.jvm-exit-on-fatal-error' is enabled for for ActorSystem[HelloSystem] java.lang.NoSuchMethodError: akka.actor.ActorCell.addFunctionRef(Lscala/Function2;)Lakka/actor/FunctionRef; ,其中包括我尝试使用的冲突管理器:

  object v {
    val akka = "2.5.8"
    val scrape = "0.4.0"
  }

  val akka = Seq(
    "com.typesafe.akka" %% "akka-actor" % v.akka,
    "com.typesafe.akka" %% "akka-slf4j" % v.akka
  )

  val scrape = Seq(
    "io.bfil" %% "scalescrape" % v.scrape
  )

  lazy val allDeps =  akka ++ scrape

编辑:从main添加代码。

5.8

2 个答案:

答案 0 :(得分:2)

根据Akka HTTP 10.0.x的兼容性指南(scalescrape 0.4.0依赖于Akka HTTP 10.0.1):

  

Akka HTTP 10.0.x(二进制)与 Akka 2.4.x以及Akka 2.5.x兼容,但为了方便构建(并因此发布)工件)取决于2.4系列。根据您构建依赖项的方式,您可能会遇到依赖于akka-actor系列2.5的情况,并且依赖于akka-http系列中的10.0反过来会转移版本akka-streams中的2.4依赖项,这违反了所有Akka模块必须具有相同版本的二进制兼容性要求,因此akka-streams依赖项必须是相同的版本作为akka-actor(所以2.5系列中的确切版本)。

     

为了解决此依赖性问题,您必须明确依赖akka-streams,并使其与Akka环境的其余部分版本相同....

将您的Akka依赖项更改为以下内容:

val akka = Seq(
  "com.typesafe.akka" %% "akka-actor" % v.akka,
  "com.typesafe.akka" %% "akka-slf4j" % v.akka,
  "com.typesafe.akka" %% "akka-stream" % v.akka // <-- add this
)

(请注意,Akka HTTP当前10.1.x分支的compatibility guidelines已更改。)

答案 1 :(得分:1)

由于scalescrape中使用的Akka-HTTP版本10.0.1与Akka 2.5不同步,很可能造成这种情况。以下是最近Akka-HTTP 10.0.5的发布说明:

  

这是Akka HTTP 10.0系列的第五个维护版本。它   主要是为了稳定内部与内部对齐   即将推出的Akka 2.5发布。 ...

您可能需要考虑将Akka-HTTP依赖项修改为更新版本的Akka HTTP 10.0。截至目前的最新版本是10.0.11。