【问题标题】:Using the version SettingKey as a dependency version in sbt在 sbt 中使用版本 SettingKey 作为依赖版本
【发布时间】:2019-11-06 01:54:13
【问题描述】:

现状

我的项目设置有点像这样:

项目:root (build.sbt, version.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的build.sbt中直接这样使用版本: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. 异常。

有什么方法可以达到我的需要吗?

【问题讨论】:

  • version.sbt放到project目录下?
  • 但是我需要为每个子项目复制它,对吗?
  • 你也许是对的。我通常在 Play 文档中将多项目作为推荐来处理。 - 在这里查看我的答案:stackoverflow.com/a/56286492/2750966
  • 这是可能的,但我不希望在根项目中定义子项目的所有依赖项,因为那样我觉得我会失去很多我得到的模块化多项目解决方案。

标签: scala sbt multi-project


【解决方案1】:

在项目之间依赖的推荐方式是在你的根目录/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 := 方法可以工作,但确实可以!非常感谢。
猜你喜欢
  • 2016-09-18
  • 2019-12-25
  • 1970-01-01
  • 2014-02-18
  • 2014-06-30
  • 2013-12-18
  • 1970-01-01
  • 2012-01-03
  • 2016-09-18
相关资源
最近更新 更多