可以在build.sbt中解析Json吗?

问题描述 投票:-1回答:1

我想在构建过程中验证一个从服务器下载的Json文件,如果有任何错误,构建失败。

可以在build.sbt中解析验证Json吗?

scala sbt
1个回答
4
投票

你的 build.sbt 是 scala 代码,所以它可以做所有你可以用其他 scala 代码做的事情。

你应该能够在projectbuild.sbt中添加你的build.sbt代码的依赖关系(例如json解析库),因为 循环式.


2
投票

这里举个例子来补充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 在进行编译前,应检查前置条件。

© www.soinside.com 2019 - 2024. All rights reserved.