sbt ivy2: конфигурация 'master' не найдена в 'compile' - PullRequest
0 голосов
/ 12 сентября 2018

Я получаю следующую ошибку при создании библиотеки bp-kafka-bp2, которая зависит от библиотеки bp-bp2-componentized:

sbt.librarymanagement.ResolveException: неразрешенная зависимость: com.foo # bp-bp2-componententized_2.11; 3.3. +: конфигурация не найдена в com.foo # bp-bp2-componententized_2.11; 3.3.0: 'master'. Требовалось из com.foo # bp-kafka-bp2_2.11; 3.10.1 compile

Неразрешенная библиотека bp-bp2-componentized действительно существует в ~/.ivy2/local и не имеет конфигурации master в ее ivy.xml

Мои вопросы:

  1. Должна ли зависимая библиотека (bp-kafka-bp2) искать master конфигурацию отсутствующей библиотеки (не совсем)?
  2. Если не нужно искать конфигурацию master, что я могу сделать, чтобы она перестала это делать?
  3. Если нужно искать конфигурацию master, как мне заставить сборку для (не совсем) отсутствующей библиотеки создать такую ​​конфигурацию?

Я пробовал это в sbt версиях 1.1.5 и 1.2.1. Я удалил ~/.ivy2/local, ./ivy2/cache и ~/.sbt. Я также удалил все каталоги /target и project/target в библиотеке, которую я строю и сделал sbt clean

Эта библиотека прекрасно работает уже год или два. Единственное недавнее изменение, о котором я могу подумать, это введение опции кросс-компиляции 2.11 и 2.12, которая здесь не рассматривается, я просто собираю версию 2.11 самостоятельно.

Прямая зависимость объявлена ​​в многопроектном build.sbt как

lazy val bp2 = (project in file("bp2")).
  settings(commonSettings:_*).
  settings(Seq(
    name := "bp-kafka-bp2"
  ):_*).
  settings(
    libraryDependencies ++= Seq(
      "org.scalatest" %% "scalatest" % ScalaTestVersion % "test",
      "ch.qos.logback" % "logback-classic" % LogbackVersion % "test",
      "com.foo" %% "bp-bp2-componentized" % Constellation.dependency("bp-bp2"),
      "com.foo" %% "bp-akka-http" % Constellation.dependency("bp-akka")
    )
  ).
  dependsOn(reactiveComponentized)

где Constellation.dependency - это просто функция, которая ищет версию по имени и превращает ее в диапазон патчей:

object Constellation {
  ...  
  def dependency(name: String) : String = versions(name).split("\\.").dropRight(1).mkString(".") + ".+"
}

Из сообщения об ошибке видно, что версия найдена и преобразована в 3.3.+, который затем корректно преобразуется в 3.3.0 в кэше ivy. Но затем он настаивает на поиске конфигурации master, которой нет.

...