Я новичок в SBT и пытаюсь создать многомодульный проект. Я сталкиваюсь с ситуацией, когда я хотел бы иметь одно место, где я мог бы определить версии для библиотек, используемых в модулях. Я попытался создать пользовательский параметр SettingKey - в корневом проекте:
val akkaVersion = SettingKey[String]("Akka version used in our project")
name := "hello-app"
version in ThisBuild := "1.0.0"
organization in ThisBuild := "com.jaksky.hello"
scalaVersion := "2.10.4"
akkaVersion in ThisBuild:= "2.3.4"
// Common settings/definitions for the build
def OurProject(name: String): Project = (
Project(name, file(name))
)
lazy val common = (
OurProject("common")
)
lazy val be_services = (
OurProject("be-services")
dependsOn(common)
)
В проекте be-services я пробовал следующее:
libraryDependencies ++= Seq(
"com.typesafe.akka" %% "akka-actor" % akkaVersion.value,
"com.typesafe.akka" %% "akka-cluster" % akkaVersion.value,
"com.typesafe.akka" %% "akka-kernel" % akkaVersion.value,
"com.typesafe.akka" %% "akka-remote" % akkaVersion.value,
"com.typesafe.akka" %% "akka-slf4j" % akkaVersion.value,
"ch.qos.logback" % "logback-classic" % "1.0.13"
)
Дело в том, что akkaVersion не виден (akkaVersion не найден - это сообщение об ошибке).
Мои квесты:
- Является ли карта настроек общей для модулей? Описанная проблема, вероятно, отвечает -> НЕТ
- Какова наилучшая практика в этой ситуации?
Я нашел следующие возможности:
- Объект Scala, содержащий строковые константы. Мне кажется немного неуместным, так как версия проекта указана в build.sbt, так почему зависимые библиотеки должны быть скрыты где-то в project/GlobalVersions.scala или около того.
- Создание последовательности libDepenDency, которую можно использовать повторно. Это ограничивает гибкость, и я не всегда хочу зависеть от упомянутых библиотек.
- Пользовательская настройка кажется немного тяжеловесной, но мне кажется, что это чистый способ, но он не смог заставить его работать.
Просто для полноты картины - с помощью SBT 0.13.5
Я считаю, что это настолько фундаментальная проблема, что я не первый, кто сталкивается с этим вопросом.
Спасибо за помощь