Can you access a SBT SettingKey inside a Command?

2020-03-26 04:16发布

问题:

I am writing a Command and want to use the Logger in TaskStreams but this is not possible since you cannot access .value of a SettingKey in a Command. Is there some way?

def myCommand = Command.single("myCommand") {
  case (currentState, userInput) =>
    val extracted = Project.extract(currentState)
    val log = streams.value.log   <--- not allowed
    log.info("Some logging")
    currentState
}

回答1:

streams is intended for tasks, not commands.

So one way is to create a "holder" TaskKey and get a stream of that, for instance sbt-pgp creates and uses pgpCmdContext - see the definition of pgp-cmd.


Another way is using sLog, but I'm not sure if sLog should be used here:

val myCommand = Command.single("myCommand") { case (s, arg) =>
  val extracted = Project extract s
  val log = extracted get sLog
  log info "Some logging"
  currentState
}


标签: scala sbt