Обработка нескольких версий одной и той же библиотеки в SBT - PullRequest
0 голосов
/ 14 января 2019

У меня есть проект Spark в Scala, в котором я пытаюсь использовать зависимость google-cloud-storage. Ниже приведены зависимости, добавленные в build.sbt

val sparkVersion  = "2.2.0"
"org.apache.spark" %% "spark-core" % sparkVersion % "provided",
"org.apache.spark" %% "spark-sql" % sparkVersion % "provided",
"com.google.cloud" % "google-cloud-storage" % "1.55.0",
"com.typesafe" % "config" % "1.3.1"

Теперь, когда я собираю банку и запускаю ее, я получаю следующее исключение.

Exception in thread "main" java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument(ZLjava/lang/String;Ljava/lang/Object;)V

При поиске в Google я обнаружил, что это вызвано несколькими версиями Guava на моем пути к классам.

В попытке решить проблему я исключил Guava из google-cloud-storage зависимости.

"com.google.cloud" % "google-cloud-storage" % "1.55.0" exclude("com.google.guava", "guava"),

Но тогда я получил следующую ошибку:

Exception in thread "main" java.lang.NoClassDefFoundError: com/google/cloud/storage/StorageOptions

Эта ошибка означает, что теперь в classpath не было Guava банок.

У меня вопрос, как это возможно до исключения гуавы? Я получал ошибку из-за нескольких версий в classpath, почему я не получаю ошибку, когда java guars найден, когда я исключаю одну ее версию.

Как устранить эту ошибку.

1 Ответ

0 голосов
/ 14 января 2019

Вы можете попытаться добавить зависимость guava в качестве явной зависимости:

libraryDependencies +=  "com.google.guava" % "guava" % "newest_version"  

Чтобы выяснить новейшую версию, вы можете использовать этот плагин: sbt-dependency-graph

Или проверьте eviction warnings в консоли SBT.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...