使用版本SettingKey作为sbt中的依赖版本

时间:2019-06-24 09:22:26

标签: scala sbt multi-project

现状

我的项目设置看起来像这样:

项目: root build.sbtversion.sbt
子项目: projectA build.sbt) 子项目: projectB 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")
  }

问题

我现在需要使用此版本来定义子项目(projectA和projectB)内的依赖项。 所以我要么:

  1. 需要从内部访问根项目的val findVersion projectA和projectB的build.sbt OR
  2. 需要在projectA和projectB:libraryDependencies += "ext-lib" % "com.fbaierl" % version.value % Provided的build.sbt中直接使用该版本。但这会导致error: 'value' can only be used within a task or setting macro, such as :=, +=, ++=, Def.task, or Def.setting.异常。

有什么办法可以实现我所需要的?

1 个答案:

答案 0 :(得分:1)

建议在项目之间进行依赖的方法是在您的root / build.sbt中具有类似的内容

val projectA = project in file("projectA")

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

如果那不是您所需要的,那么您可以使用version任务来设置依赖项中的版本,如下所示:

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

希望有帮助