我该如何解决这些依赖关系警告

问题描述 投票:0回答:1

当我为播放应用程序启动sbt shell时,我一直看到这些消息:

[warn]  * com.typesafe.akka:akka-actor_2.11:2.5.21 is selected over {2.3.13, 2.4.20}
[warn]      +- com.typesafe.akka:akka-slf4j_2.11:2.5.21 ()        (depends on 2.5.21)
[warn]      +- com.typesafe.play:play_2.11:2.6.23 ()              (depends on 2.5.21)
[warn]      +- com.typesafe.akka:akka-stream_2.11:2.5.21 ()       (depends on 2.5.21)
[warn]      +- com.typesafe.akka:akka-parsing_2.11:10.0.15 ()     (depends on 2.4.20)

我该如何解决?我是否需要显式设置akka版本,使其不选择2.5.21?

scala playframework sbt
1个回答
0
投票

我建议连接sbt-dependency-graph sbt插件并使用以下命令来确定哪些组件取决于akka-actor的版本

sbt <project>/dependencyTree
sbt "<project>/whatDependsOn <organization> <module> <revision>"
sbt <project>/evicted

提出组件依赖关系列表后,您有几种选择:

  • 请确保您使用的组件版本(例如播放)通常需要相同版本的akka​​-actor和akka。我通常通过在https://mvnrepository.com/
  • 中检查相关库的POM文件来完成此操作
  • 强制sbt使用特定版本的akka​​(通过dependencyOverrides)。它通常可以安全地对不同的补丁版本进行操作(如major.minor.patch),用于使用语义版本控制的库(https://semver.org/)。但这可能会给不同的未成年人造成问题。特别是主要版本,如果它们不向后兼容。
  • 如果冲突和警告没有引起问题,请忽略它们。
  • 如果使用sbt-assembly创建胖子罐,则可以使用shading允许多个版本的akka​​通过以下方式驻留在同一应用程序中将其中一个移至其他包装。不过,并非总是可能的(例如,当库通过名称动态加载类时)
  • 编写一个自定义类加载器,以将库的不同版本动态加载到单独的保护域中。它并不简单,需要大量代码。我不建议akka使用它。
© www.soinside.com 2019 - 2024. All rights reserved.