如何在SBT中定义处理作用域信息的TaskKey并获取作用域相关键值?
如何在SBT中打印不同项目作用域下的键值
我来给你捋清楚怎么在SBT里区分root和projA项目,打印它们各自的keyTest值,其实分两种场景操作就行:
一、用SBT控制台直接查询
首先假设你已经在build.sbt里给两个项目分别设置了keyTest的值,比如:
val keyTest = settingKey[String]("测试用的自定义键") lazy val root = (project in file(".")) .settings( keyTest := "这是root项目的keyTest值" ) lazy val projA = (project in file("projA")) .settings( keyTest := "这是projA项目的keyTest值" )
启动SBT控制台后,直接用show命令加上项目引用/键名的格式就能指定作用域查询:
- 打印root项目的
keyTest:输入show root/keyTest - 打印projA项目的
keyTest:输入show projA/keyTest
执行后就能在控制台看到对应项目的键值结果了。
二、在build.sbt中定义任务自动打印
如果你想在构建过程中自动打印多个项目的键值,可以自定义一个任务来实现:
val keyTest = settingKey[String]("测试用的自定义键") lazy val root = (project in file(".")) .settings( keyTest := "这是root项目的keyTest值" ) lazy val projA = (project in file("projA")) .settings( keyTest := "这是projA项目的keyTest值" ) // 自定义任务,打印两个项目的keyTest值 val printKeyTest = taskKey[Unit]("打印所有项目的keyTest值") printKeyTest := { val rootVal = (root / keyTest).value val projAVal = (projA / keyTest).value println(s"root项目的keyTest:$rootVal") println(s"projA项目的keyTest:$projAVal") }
保存build.sbt后,在SBT控制台输入 printKeyTest,就能一次性输出两个项目的键值了。
核心逻辑就是SBT的作用域通过项目引用/键的格式来定位,只要明确指定项目,就能精准获取对应作用域的键值啦。
内容的提问来源于stack exchange,提问作者LoranceChen
相关产品推荐
相关产品推荐

