在 sbt 中使用版本 SettingKey 作为依赖版本
Using the version SettingKey as a dependency version in sbt
现状
我的项目设置看起来有点像这样:
项目: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)内的依赖项。
所以我要么:
- 需要从内部访问根项目的
val findVersion
projectA 和 projectB 的 build.sbt
OR
- 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.
异常。
有什么方法可以实现我所需要的吗?
项目之间依赖的推荐方式是在你的根目录/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) }
希望对您有所帮助
现状
我的项目设置看起来有点像这样:
项目: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)内的依赖项。 所以我要么:
- 需要从内部访问根项目的
val findVersion
projectA 和 projectB 的build.sbt
OR - 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.
异常。
有什么方法可以实现我所需要的吗?
项目之间依赖的推荐方式是在你的根目录/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) }
希望对您有所帮助