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
}