sbt не может импортировать в проект две библиотеки elasticsearch разной версии - PullRequest
0 голосов
/ 09 июля 2020

Я пытаюсь подключиться к двум кластерам elasticsearch, используя код scala, и запрашивать у них elasticsearch. используя следующие библиотеки и код в build.sbt проекта scala:

libraryDependencies +="org.elasticsearch" % "elasticsearch" % "7.2.0"
libraryDependencies += "org.elasticsearch.client" % "elasticsearch-rest-high-level-client" % "7.2.0"

AND

val elastic4sVersion = "6.2.8"
libraryDependencies ++= Seq(
  "com.sksamuel.elastic4s" %% "elastic4s-core" % elastic4sVersion,
  // for the http client
  "com.sksamuel.elastic4s" %% "elastic4s-http" % elastic4sVersion,
)

У них есть общая клиентская библиотека, которая отсутствует при сборке. Я вижу либо 6.x, либо 7.x, но не то и другое одновременно. Я пробовал использовать метод затенения

assemblyShadeRules in assembly := Seq(
  ShadeRule.rename("org.elasticsearch.client.**" -> "my_conf.@1")
    .inLibrary("org.elasticsearch.client" % "elasticsearch-rest-high-level-client" % "7.2.0")
    .inAll
)

assemblyShadeRules in assembly := Seq(
  ShadeRule.rename("org.elasticsearch.client.**" -> "my_conf_1.@1")
    .inLibrary("org.elasticsearch.client" % "elasticsearch-rest-high-level-client" % "6.2.2")
    .inAll
)
assemblyShadeRules in assembly := Seq(
  ShadeRule.rename("org.elasticsearch.elasticsearch.**" -> "my_configuration.@1")
    .inLibrary("org.elasticsearch" % "elasticsearch" % "7.2.0")
      .inAll
)

, но не могу получить доступные версии с затенением и получаю сообщение об ошибке при попытке импортировать их в ссылки проекта.

1 Ответ

0 голосов
/ 10 июля 2020

Ну, на JVM у вас может быть только одна версия одного и того же .class в пути к классам, поэтому каждый инструмент сборки будет учитывать это.

sbt гарантирует, что будет только одна версия библиотеки доступны в проекте (если вы не укажете его явно, я бы предположил, что он выбирает самый высокий номер версии из всех конфликтующих версий), поэтому, если вам нужна библиотека, которая используется обеими зависимостями, я бы поискал версии, которые используют ту же версию зависимость. (Или явно переопределите версию и используйте sbt-mima с sbt-missinglink, чтобы убедиться, что это изменение ничего не сломало).

Из того, что я вижу, самым простым способом было бы использовать таблицу на страница проектов (вместе с maven), чтобы выбрать правильную версию elastic4s для той версии elasticsearch, которую вы хотите использовать.

...