Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 如何更改任务';用户的行为基于用户如何调用它,而不要求他们更改代码?_Scala_Sbt - Fatal编程技术网

Scala 如何更改任务';用户的行为基于用户如何调用它,而不要求他们更改代码?

Scala 如何更改任务';用户的行为基于用户如何调用它,而不要求他们更改代码?,scala,sbt,Scala,Sbt,我正在使用sbt-s3将我的uberjar工件上传到s3进行部署。我现在需要的是让开发人员能够选择他们是推进到登台还是生产 sbt-s3看起来像这样 mappings in upload <<= (name, version, scalaBinaryVersion) map { (name, version, scalaBinaryVersion) => Seq(new java.io.File("target/scala-%s/%s.jar" format(sca

我正在使用
sbt-s3
将我的uberjar工件上传到s3进行部署。我现在需要的是让开发人员能够选择他们是推进到登台还是生产

sbt-s3
看起来像这样

  mappings in upload <<= (name, version, scalaBinaryVersion) map { (name, version, scalaBinaryVersion) =>
    Seq(new java.io.File("target/scala-%s/%s.jar" format(scalaBinaryVersion, name)) -> ("%s.jar" format name)) }
上载中的映射(“%s.jar”格式名称))]
假设我想在
%s.jar
前面加一个字符串,比如
“staging”
“production”
,这取决于用户如何调用SBT(让他们每次想推送时都编辑
Build.scala
,这似乎很愚蠢)。例如:
sbt s3Upload
进入暂存,而
sbt生产:s3Upload
sbt生产s3Upload
将进入生产

我很难理解作用域以及如何使用它们来解决这个问题。我不能只是在生产中设置和核心
S3Prefix
,因为这样他们就不能推进到登台。对于以下任务,我也没有幸运地将
“staging”
的默认值改写为
“production”
,使之成为
“production”


想法?

一个可能的解决方案是使用输入任务,这是一个简单的任务定义,来自:

demo:={
//获取解析结果
val args:Seq[String]=空格分隔(“”)。已解析
//这里,我们还使用'scalaversation'设置的值
println(“当前Scala版本为”+scalaVersion.value)
println(“演示的参数为:”)
args foreach println
}
根据参数,您可以推送到暂存或生产

我认为可以有一个更优雅的配置解决方案,但我以前没有这样做

  demo := {
  // get the result of parsing
  val args: Seq[String] = spaceDelimited("<arg>").parsed
  // Here, we also use the value of the `scalaVersion` setting
  println("The current Scala version is " + scalaVersion.value)
  println("The arguments to demo were:")
  args foreach println
}