Настройка моего проекта выглядит примерно так:
Проект: корень (build.sbt
, version.sbt
)
Подпроект: проектА (build.sbt
)
Подпроект: проектБ (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). Так что я либо:
val findVersion
корневого проекта изнутри
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.
.Есть ли способ добиться того, что мне нужно?
Но тогда мне нужно скопировать его для каждого отдельного подпроекта, верно?
ты наверное прав. Обычно я работаю с несколькими проектами, как рекомендуется в документации Play. - проверьте мой ответ здесь: stackoverflow.com/a/56286492/2750966
Это было бы возможно, но я бы предпочел не определять все зависимости подпроектов в корневом проекте, так как я чувствую, что потеряю большую часть модульности, которую я получаю с многопроектными решениями.
Рекомендуемый способ зависимости между проектами - в вашем корне / 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) }
надеюсь, это поможет
Я не совсем понимаю, почему это работает с использованием подхода libraryDependencies :=
, но это работает! Большое спасибо.
Поместить
version.sbt
в каталогproject
?