我想在构建过程中验证一个从服务器下载的Json文件,如果有任何错误,构建失败。
可以在build.sbt中解析验证Json吗?
你的 build.sbt 是 scala 代码,所以它可以做所有你可以用其他 scala 代码做的事情。
你应该能够在projectbuild.sbt中添加你的build.sbt代码的依赖关系(例如json解析库),因为 循环式.
这里举个例子来补充Jasper-M的答案。
例如,加上liahoy的 requests-scala
HTTP客户端库,以及 upickle
JSON反序列化库到 project/builds.sbt
libraryDependencies ++= List(
"com.lihaoyi" %% "requests" % "0.6.0",
"com.lihaoyi" %% "upickle" % "1.1.0"
)
然后根据 project/Preconditions.scala
添加以下对象,它将包含你想在运行构建之前检查的断言。
object Preconditions {
import scala.util.Try
import requests._
import upickle.default._
case class User(login: String, id: Int)
implicit val userRW: ReadWriter[User] = macroRW
def validateUserJson() = {
val result = Try(read[User](get("https://api.github.com/users/lihaoyi").text)).isSuccess
assert(result, "User JSON should be valid")
}
}
现在,这些设施将提供给 build.sbt
在根项目下创建一个任务。让我们在 build.sbt
来运行断言
lazy val checkPreconditions = taskKey[Unit]("Validate pre-conditions before building")
checkPreconditions := {
Preconditions.validateUserJson()
println("All preconditions passed!")
}
最后让我们做 compile
傍身 checkPreconditions
使用 dependsOn
如是
Compile / compile := (Compile / compile).dependsOn(checkPreconditions).value
现在执行 sbt compile
在进行编译前,应检查前置条件。