Как я могу исправить эти предупреждения зависимости - PullRequest
0 голосов
/ 09 октября 2019

Я вижу эти сообщения, когда запускаю оболочку sbt для моего игрового приложения:

[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?

Ответы [ 2 ]

2 голосов
/ 10 октября 2019

Я бы порекомендовал подключить плагин sbt-dependency-graph sbt и использовать следующие команды, чтобы выяснить, какие компоненты зависят от какой версии akka-actor

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

После получения списка зависимостей компонентов у вас есть несколько вариантов:

  • Убедитесь, что вы используете версии компонентов (например, play), для которых требуется одинаковая версия akka-actor и akkaв общем. Я обычно делаю это, проверяя файлы POM для рассматриваемых библиотек по адресу https://mvnrepository.com/
  • Заставить sbt использовать определенную версию akka (через dependencyOverrides ). Обычно это безопасно делать для разных версий исправлений (как в major.minor.patch) для библиотек, использующих семантическое управление версиями (https://semver.org/).). Но это может вызвать проблемы для разных младших и особенно основных версий, если они не имеют обратной совместимости.
  • Игнорировать конфликты и предупреждения, если они не вызывают проблем.
  • Если вы используете sbt-assembly для создания банок жира, вы можете использовать shading, чтобы разрешить нескольким версиям akka жить в одном и том же приложении путем перемещения одной из них в другой пакет. Однако это не всегда возможно (например, когда библиотека загружает класс динамически по имени)
  • writeпользовательский загрузчик классов для динамической загрузки различных версий библиотеки в отдельные домены защиты. Это не тривиально и требует много кода. Я бы не рекомендовал его для akka.
1 голос
/ 10 октября 2019

Вы получаете предупреждение о выселении от sbt, вы можете проверить документацию по этой ссылке .

Что вы можете сделать, это переопределить зависимость, используемую в файле sbt, чтобы избежать ошибок во время выполнения.

Например:

dependencyOverrides += "com.typesafe.akka" %% "akka-actor" % "2.5.21"

Таким образом, вы указываете sbt, какую версию библиотеки использовать. Вы также можете проверить плагин sbt dependency-graph , чтобы понять все зависимости внутри вашего проекта.

...