我想rm -r在我的sbt项目构建时执行一个shell命令 - 一个目录.这将是以前compile.
推理:有一个永远不会更新的缓存文件.如果我在每次编译之前删除它,它会强制更新.
请指教.
在非功能语言中,我可能会这样做:
try {
// some stuff
} catch Exception ex {
return false;
}
// Do more stuff
return true;
Run Code Online (Sandbox Code Playgroud)
但是,在Scala中,这种模式显然不正确.如果我的scala代码如下所示:
try {
// do some stuff
}
catch {
case e: Exception => // I want to get out of here and return false
)
}
// do more stuff
true
Run Code Online (Sandbox Code Playgroud)
我该怎么做呢?当然,我不想使用"返回"语句,但我也不想通过"做更多的东西"并最终返回true.
我有一个build.scala文件,其依赖关系如下所示:
"com.example" % "core" % "2.0" classifier "full-unstable"
Run Code Online (Sandbox Code Playgroud)
这会使用完全不稳定的分类器来提取JAR
我需要做的是从Jenkins(构建服务器)向SBT(使用-DI presme)指定"unstable"或"stable"以更改分类器.如果变量替换像在Maven中那样工作,则依赖关系看起来像:
"com.example" % "core" % "2.0" classifier "full-${branch}"
Run Code Online (Sandbox Code Playgroud)
我会做"-Dbranch = unstable"或"-Dbranch = stable"
我很不清楚如何使用SBT和build.scala文件执行此操作.
我有一个API,它接收表示一种语言的字符串。我的Scala代码(将Scalatra用于API)调用了我必须支持的现有Java代码。该Java代码期望该语言采用其定义的枚举形式。
我可以对字符串进行详尽的模式匹配以返回正确的枚举元素,但是我必须相信还有更好的方法吗?
例如,我可以这样做:
f.language.value.get.toUpperCase.split(",").map {
case "ALL" => JavaLanguageEnum.ALL
case "AAA" => JavaLanguageEnum.AAA
case "BBB" => JavaLanguageEnum.BBB
case "CCC" => JavaLanguageEnum.CCC
case "DDD" => JavaLanguageEnum.DDD
case "EEE" => JavaLanguageEnum.EEE
case "FFF" => JavaLanguageEnum.FFF
case _ => JavaLanguageEnum.ALL
}.toList
Run Code Online (Sandbox Code Playgroud)
...但是那将是完成这项工作的一大段代码。是否有更好的方法简单地说:“如果字符串与枚举之一匹配,则返回该枚举以便我可以将其传递给它?”