如何使SBT任务中使用一个特定的配置范围是什么? [英] How to make a sbt task use a specific configuration scope?

查看:197
本文介绍了如何使SBT任务中使用一个特定的配置范围是什么?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个任务懒VAL任务= TaskKey [单位] ,需要一个懒VAL设置= SettingKey [字符串] 作为输入。我也有三种不同的,独立的配置范围(配置(开发)配置(舞台)配置(刺))和用于指定不同的值 build.sbt 文件设置为每个配置范围的(设置舞台:=富 ...)。

我的预期,调用任务使用的配置范围preFIX会使任务从各自的配置范围使用的值(如&GT ;开发:任务将使任务使用设置值从开发,使用命令>阶段:任务将使任务从期使用设置,...)。然而,这似乎并没有工作。

我怎么能强迫任务来从一个特定的配置范围内使用的设置?

build.sbt:

 设置:=默认设置设置在舞台:=舞台布景在设置PROD:=PROD设置

Build.scala:

 进口sbt._
进口Keys._反对TaskBuild扩展构建{
  VAL设置= SettingKey [字符串](设置,一个简单的字符串设定)  VAL任务= TaskKey [单位](任务,一个简单的任务实验)  VAL taskTask =任务<< =设定图{S:字符串=>
    的println(设置为:+ S)
  }  懒VAL开发=配置(开发)describedAs(开发环境设置)
  懒VAL阶段=配置(舞台)describedAs(阶段的环境设置)
  懒VAL PROD =配置(刺)describedAs(PROD环境设置)  懒VAL根=项目(
    项目,
     文件(。),
     设置= Defaults.defaultSettings ++ SEQ(taskTask)
  )
  .configs(开发,分期,督促)
}


解决方案

我觉得你需要写像

  VAL devTaskSetting =任务<<在开发地图{S =设置:字符串=>
   的println(设置在开发是:+ S)
}

您也可以定义独立的任务键,这样

  VAL devTask = TaskKey [单位]在开发中(任务,一个简单的任务实验)
VAL stageTask = TaskKey [单位](任务,一个简单的任务实验)的阶段

I have a task lazy val task = TaskKey[Unit] that takes a lazy val setting = SettingKey[String] as input. I also have three different, independent config scopes (config("dev"), config("stage"), config("prod")) and a build.sbt file that specifies different values for setting for each of the config scopes (setting in stage := "foo" ... ).

I expected that calling task using the config scope prefix would make the task use the values from the respective config scope (e.g. >dev:task would make the task use the setting values from dev, using command >stage:task would make the task use the setting values from stage, ...). However, this does not seem to work.

How can I force task to use the settings from a specific config scope?

build.sbt:

setting := "default setting"

setting in stage := "stage setting"

setting in prod  := "prod setting"

Build.scala:

import sbt._
import Keys._

object TaskBuild extends Build {
  val setting = SettingKey[String]("setting", "a simple string setting")

  val task = TaskKey[Unit]("task", "a simple task experiment")

  val taskTask = task <<= setting map { s: String =>
    println("Setting is: " + s)
  }

  lazy val dev = config("dev") describedAs("dev environment settings")
  lazy val stage = config("stage") describedAs("stage environment settings")
  lazy val prod = config("prod") describedAs("prod environment settings")

  lazy val root = Project(
    "project",
     file("."),
     settings = Defaults.defaultSettings ++ Seq(taskTask)
  )
  .configs(dev, stage, prod)
}

解决方案

I think you need to write something like

val devTaskSetting = task <<= setting in dev map { s: String =>
   println("Setting in Dev is: " + s)
}

You can also define separate task keys, like this

val devTask   = TaskKey[Unit]("task", "a simple task experiment") in dev
val stageTask = TaskKey[Unit]("task", "a simple task experiment") in stage

这篇关于如何使SBT任务中使用一个特定的配置范围是什么?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆