Scala SBT: Можете ли вы импортировать две разные версии одной и той же зависимости в один файл сборки? - PullRequest
0 голосов
/ 12 сентября 2018

Мне нужно обновить одну библиотеку, и в новой версии произошли серьезные изменения.Я бродил, могу ли я как-то импортировать две версии вместе, используя sbt, и чтобы классы более новой версии переопределяли классы более старой версии, если таковые существуют.Я думаю, что это позволило бы мне выполнить обновление без ошибок компиляции, пока я не смогу полностью избавиться от старой версии.

Возможно ли это вообще?Я не могу найти ничего, что говорит, что это возможно до сих пор, поэтому, если это не так, есть ли лучший способ выполнить миграцию, чем заменить старую версию новой версией и решить все эти ошибки один за другим?

Пример с гладкой библиотекой (приводит к ошибке неразрешенных зависимостей)

libraryDependencies ++= Seq(
  "com.typesafe.slick" %% "slick" % "2.1.0",
  "com.typesafe.slick" %% "slick" % "3.0.0"
)

Буду признателен за любые советы или указатели.Спасибо!

Ответы [ 3 ]

0 голосов
/ 13 сентября 2018

если классы более новой версии переопределяют классы более старой версии, если существует

Я считаю, что это невозможно.

То, с чем вы столкнулись, обычно известно как «JAR Hell». Единственный известный мне способ обойти это - использовать затененные зависимости (см. https://github.com/sbt/sbt-assembly#shading для одного примера), но это вызывает другие проблемы.

Самое чистое решение (которое, к сожалению, также является самой трудоемкой) - просто укусить пулю и решить все проблемы сразу.

0 голосов
/ 13 сентября 2018

В зависимости от того, насколько сложным является подмножество используемой вами библиотеки, может быть возможно написать оболочку вокруг гладких объектов, интерфейс которой похож на 2.1.0 (только для вещей, которые фактически используются), но реализован в терминах3.0.0.Хотя это может быть нетривиальным и трудоемким процессом.

0 голосов
/ 12 сентября 2018

AFAIK это невозможно, потому что в пути к классам может быть только одна версия зависимости.Даже если бы был способ форсировать это, не было бы никакого способа определить, какую версию вы хотите импортировать.

Может быть стоит взглянуть на OSGi, поскольку Java / Maven / etc страдают от той же проблемы из-закак работает загрузчик классов JVM.

...