Настройка глобальной версии многомодульного проекта sbt

Я новичок в 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 не найден - это сообщение об ошибке).

Мои квесты:

  • Является ли карта настроек общей для модулей? Описанная проблема, вероятно, отвечает -> НЕТ
  • Какова наилучшая практика в этой ситуации?

Я нашел следующие возможности:

  1. Объект Scala, содержащий строковые константы. Мне кажется немного неуместным, так как версия проекта указана в build.sbt, так почему зависимые библиотеки должны быть скрыты где-то в project/GlobalVersions.scala или около того.
  2. Создание последовательности libDepenDency, которую можно использовать повторно. Это ограничивает гибкость, и я не всегда хочу зависеть от упомянутых библиотек.
  3. Пользовательская настройка кажется немного тяжеловесной, но мне кажется, что это чистый способ, но он не смог заставить его работать.

Просто для полноты картины - с помощью SBT 0.13.5

Я считаю, что это настолько фундаментальная проблема, что я не первый, кто сталкивается с этим вопросом.

Спасибо за помощь


person jaksky    schedule 29.12.2014    source источник


Ответы (1)


Определения в файлах .sbt не отображаются в других файлах .sbt. Чтобы разделить код между файлами .sbt, определите один или несколько файлов Scala в каталоге project/ корня сборки.

[из документации http://www.scala-sbt.org/]

person Renat Bekbolatov    schedule 02.01.2015