为什么Akka-Http仍然使用较旧的Akka-Actor?

时间:2017-08-27 09:14:30

标签: maven akka akka-http

我已将最新的akka​​-http添加到我的项目中,但其中包括akka-actor上非常旧的2.4.19版本。因此我还在依赖项中添加了akka-actor版本2.5.4。但是,这会导致以下错误: -

Detected java.lang.NoSuchMethodError error, which MAY be caused by incompatible Akka versions on the classpath.

我的maven配置如下: -

<dependencies>
    <dependency>
        <groupId>com.typesafe.akka</groupId>
        <artifactId>akka-http_2.11</artifactId>
        <version>10.0.9</version>
    </dependency>
    <dependency>
        <groupId>com.typesafe.akka</groupId>
        <artifactId>akka-actor_2.11</artifactId>
        <version>2.5.4</version>
    </dependency>
</dependencies>

我错过了什么?是否有任何版本的akka​​-http使用最新的akka​​-actor?

更新:添加了依赖关系图

Dependecy graph. Note 10.0.9 includes actor 2.4.19 not the latest

1 个答案:

答案 0 :(得分:1)

从文档中的Compatibility Guidelines页面:

  

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环境的其余部分版本相同....

将Maven依赖项更改为以下内容:

<dependencies>
    <dependency>
        <groupId>com.typesafe.akka</groupId>
        <artifactId>akka-actor_2.11</artifactId>
        <version>2.5.4</version>
    </dependency>
    <!-- Explicitly depend on akka-streams in same version as akka-actor -->
    <dependency>
        <groupId>com.typesafe.akka</groupId>
        <artifactId>akka-stream_2.11</artifactId>
        <version>2.5.4</version>
    </dependency>
    <dependency>
        <groupId>com.typesafe.akka</groupId>
        <artifactId>akka-http_2.11</artifactId>
        <version>10.0.9</version>
    </dependency>
</dependencies>