Использование версии SettingKey в качестве версии зависимости в sbt

Текущая ситуация

Настройка моего проекта выглядит примерно так:

Проект: корневой (build.sbt, version.sbt)
Подпроект: проект A (build.sbt) Подпроект: проект B (build.sbt)

В моем version.sbt у меня есть val, который считывает версию для использования из внешнего файла json следующим образом:

version in ThisBuild := findVersion

lazy val findVersion: String =
  parse(Source.fromFile("../buildProperties.json").mkString).map(_ \\ "version").map(_ map (_.asString)) match {
    case Right(Some(x) :: _) => x
    case _     => throw new IllegalArgumentException("Unable to read buildProperties.json")
  }

Эта проблема

Теперь мне нужно использовать эту версию для определения зависимостей внутри подпроектов (проект A и проект B). Так что я либо:

  1. необходимо получить доступ к val findVersion корневого проекта из build.sbt проекта A и проекта B ИЛИ
  2. нужно использовать версию напрямую, как это в build.sbt проекта A и проекта B: libraryDependencies += "ext-lib" % "com.fbaierl" % version.value % Provided. Но это приводит к исключению error: 'value' can only be used within a task or setting macro, such as :=, +=, ++=, Def.task, or Def.setting..

Есть ли способ добиться того, что мне нужно?


person Florian Baierl    schedule 24.06.2019    source источник
comment
Поместить version.sbt в каталог project?   -  person pme    schedule 24.06.2019
comment
Но тогда мне нужно скопировать его для каждого отдельного подпроекта, верно?   -  person Florian Baierl    schedule 24.06.2019
comment
ты наверное прав. Обычно я работаю с несколькими проектами, как рекомендуется в документации Play. - проверьте мой ответ здесь: stackoverflow.com/a/56286492/2750966   -  person pme    schedule 24.06.2019
comment
Это было бы возможно, но я бы предпочел не определять все зависимости подпроектов в корневом проекте, так как я чувствую, что потеряю большую часть модульности, которую я получаю с многопроектными решениями.   -  person Florian Baierl    schedule 24.06.2019


Ответы (1)


Рекомендуемый способ зависимости между проектами - в вашем корне / build.sbt есть что-то вроде этого

val projectA = project in file("projectA")

val projectB = (project in file("projectB")).dependsOn(projectA)

Если это не то, что у вас есть/нужно, вы можете использовать задачу версии для установки версий при настройке зависимостей, например:

libraryDependencies := { libraryDependencies.value :+ ("ext-lib" %% "com.fbaierl" % version.value) }

надеюсь, это поможет

person emilianogc    schedule 24.06.2019
comment
Я не совсем понимаю, почему это работает с использованием подхода libraryDependencies := , но это работает! Большое спасибо. - person Florian Baierl; 25.06.2019