sbt多模块项目全局版本设置

时间:2014-12-29 22:23:23

标签: scala 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)
)

在项目服务方面,我尝试了以下方法:

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 - 这是错误信息)。

我的任务:

  • 是否在模块中共享设置图?描述的问题可能是答案 - > NO
  • 在这种情况下,最佳做法是什么?

我找到了以下可能性:

  1. Scala对象持有字符串常量。在build.sbt中指定项目版本对我来说有点尴尬,所以为什么依赖的libs应隐藏在project / GlobalVersions.scala中的某个地方。
  2. 创建一个可以重用的libDepenDency seq。这限制了灵活性,我并不总是希望依赖于提到的那些库。
  3. 自定义设置似乎有点沉重,但在我看来是一种克莱恩方式,但却无法使其正常工作。
  4. 完成图片 - 使用SBT 0.13.5

    我认为这是一个根本问题,我不是第一个面对这个问题的人。

    感谢您帮助我

1 个答案:

答案 0 :(得分:2)

.sbt文件中的定义在其他.sbt文件中不可见。要在.sbt文件之间共享代码,请在构建根目录的项目/目录中定义一个或多个Scala文件。

[来自文档http://www.scala-sbt.org/]