Можно ли разобрать Json в build.sbt? - PullRequest
0 голосов
/ 03 мая 2020

Я хочу проверить загруженный файл Json с сервера во время сборки, и сборка не удалась, если есть какие-либо ошибки.

Можно ли проанализировать / проверить Json в build.sbt?

Ответы [ 2 ]

4 голосов
/ 03 мая 2020

Ваш build.sbt имеет код scala, поэтому он может делать все, что вы можете делать с другим кодом scala.

Вы должны иметь возможность добавлять зависимости (например, json библиотека разбора) вашего кода build.sbt в project / build.sbt, поскольку sbt является рекурсивным .

2 голосов
/ 03 мая 2020

Вот пример для дополнения ответа 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 в рамках проекта root , Позволяет создать задачу в 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 должно проверить предварительные условия перед продолжением компиляции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...