Настройка не может зависеть от задачи при добавлении регистрации в ключ настройки - PullRequest
0 голосов
/ 08 февраля 2019

Я обновляю sbt plugin, который имеет SettingKey из fm-sbt-s3-resolver.Я добился некоторого прогресса в явном добавлении необходимых настроек в качестве побочного эффекта вопроса здесь:

Регистрация из плагина sbt

object MyPlugin {
  override def requires = S3ResolverPlugin
  override def trigger = allRequirements

override lazy val globalSettings = Seq(
    resolvers ++= repos,
    publishMavenStyle := true,
    S3ResolverPlugin.autoImport.s3CredentialsProvider := {bucket: String =>
      new AWSCredentialsProviderChain(
        new EnvironmentVariableCredentialsProvider(),
        PropertyFilesCredentialProvider.create(bucket, streams.value.log)
      )
    }
  )
}

Когда я пытаюсьдобавьте logging, используя streams.value.log, sbt выдает ошибку:

[error]  A setting cannot depend on a task
[error] PropertyFilesCredentialProvider.create(bucket, streams.value.log)

1 Ответ

0 голосов
/ 08 февраля 2019

В этом случае вам нужно зависеть от настройки sLog вместо задачи streams.

import sbt._
import sbt.Keys._

object Logs extends AutoPlugin {

  object autoImport {
    val settingLog = settingKey[Unit]("Uses setting sLog")
    val taskLog = taskKey[Unit]("Uses task streams log")
  }

  import autoImport._

  override def trigger = allRequirements

  override def projectSettings: Seq[Def.Setting[_]] = Seq(
    settingLog := { sLog.value.info("Logging on settings execution") },
    taskLog := { streams.value.log.info("Logging on task execution") }
  )
}

Разница с settingLog в том, что он будет регистрироваться при загрузке sbt.

~/w/t/stackoverflow $ sbt
[info] Logging on settings execution

Повторные вызовы на settingLog больше не будут вести запись в журнал.Но taskLog будет печатать журнал каждый раз, когда вы его называете

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...