SBT有一个功率范围概念来处理不同条件下的不同键值。
但是我并没有真正掌握如何获取范围相对键值,例如,有build.sbt
我希望在不同的项目范围内打印keyTest
的不同值:
name := "sbttest"
version := "0.1"
scalaVersion := "2.12.4"
lazy val keyTest = taskKey[Unit]("keyTest")
lazy val settingTest = settingKey[String]("settingTest")
settingTest := "init setting"
keyTest := {
val currentProjectName = name.value
val currentSettingTest = settingTest.value
println("currentProjectName: " + currentProjectName)
println("currentSettingTest: " + currentSettingTest)
}
lazy val root = (project in file("."))
.settings(
name := "projRoot",
settingTest := "setting_root"
)
lazy val projA = (project in file("projA"))
.settings(
name := "projA",
settingTest := "setting_A"
)
结果是sbt:
> ;project root;keyTest
currentProjectName: sbttest
currentSettingTest: init setting
> ;project projA;keyTest
[error] Not a valid command: testKey
[error] Not a valid project ID: testKey
[error] Expected ':'
[error] Not a valid key: testKey (similar: test, testOnly, testFilter)
[error] testKey
[error] ^
如何打印与root
和projA
项目截然不同的结果?
> ;project root;keyTest
currentProjectName: projRoot
currentSettingTest: setting_root
> ;project projA;keyTest
currentProjectName: projA
currentSettingTest: setting_A
答案 0 :(得分:0)
默认情况下,build.sbt
中的顶级表达式在根项目范围内进行评估。在多个项目中使用常用设置的最简单方法是创建一系列这些设置,并使用每个项目上的序列调用.settings
方法。例如,您的build.sbt
将如下所示:
val keyTest = taskKey[Unit]("keyTest")
val settingTest = settingKey[String]("settingTest")
lazy val commonSettings = Seq(
version := "0.0.1",
scalaVersion := "2.12.4",
keyTest := {
val currentProjectName = name.value
val currentSettingTest = settingTest.value
println("currentProjectName: " + currentProjectName)
println("currentSettingTest: " + currentSettingTest)
}
)
lazy val root = (project in file("."))
.settings(
commonSettings,
name := "projRoot",
settingTest := "setting_root"
)
lazy val projA = (project in file("projA"))
.settings(
commonSettings,
name := "projA",
settingTest := "setting_A"
)
sbt:projRoot> sbtVersion
[info] 1.1.1
sbt:projRoot> root / keyTest
currentProjectName: projRoot
currentSettingTest: setting_root
[success] Total time: 0 s, completed Feb 17, 2018 11:35:27 AM
sbt:projRoot> projA / keyTest
currentProjectName: projA
currentSettingTest: setting_A
[success] Total time: 0 s, completed Feb 17, 2018 11:35:36 AM