Можно ли встраивать информацию во время компиляции с SBT? - PullRequest
0 голосов
/ 14 сентября 2018

Справочная информация: Мы работаем над искровым конвейером, который генерирует модели из данных. Стандартные данные. Мы собираемся использовать эти модели в разных местах и ​​проводить A / B-тестирование, чтобы обеспечить паритет со старыми моделями. Я хотел бы добавить данные ко всем нашим выводимым моделям, которые сообщают нам, какая версия кода сгенерировала модель, но вместо того, чтобы просто иметь версию, я хочу включить уникальную информацию о .jar. Время компиляции, компьютер, на котором он был скомпилирован, имя пользователя и т. Д. И т. Д. Позволяет нам проводить A / B-тестирование на материале, который также был скомпилирован разработчиками вне нашего процесса выпуска.

Есть ли хороший способ в SBT вычислить этот материал во время компиляции и встроить его в программу?

1 Ответ

0 голосов
/ 21 марта 2019

В итоге мы использовали комбинацию плагинов sbt-buildinfo и Vcs через sbt-release для выполнения этой работы. Вот что мы поместили в наш файл build.sbt:

lazy val root = (project in file(".")).
  enablePlugins(BuildInfoPlugin).
  settings(
    buildInfoKeys := Seq[BuildInfoKey](
      name,
      version,
      scalaVersion,
      sbtVersion,
      // actions are computed at compile time
      BuildInfoKey.action("buildTime") {
        LocalDateTime.now(Clock.systemUTC())
      },
      // actions are computed at compile time
     BuildInfoKey.action("buildUser") {
        val user = System.getenv("USER")
        val username = System.getenv("USERNAME")
        if (user != null) user
        else if (username != null) username
        else "Unknown"
      },
      BuildInfoKey.action("buildSha") {
        // Find the current version control system and get the current hash of it
        Vcs.detect(new File(".")).map(_.currentHash)
      }
        ),
    buildInfoPackage := "company.package"
  )

Ключевым битом здесь является то, что действия BuildInfo рассчитываются и устанавливаются во время компиляции, а не во время выполнения.

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