Получить Scrooge для создания исходных файлов на этапе тестирования?

У меня есть многомодульная сборка, которая выглядит примерно так:

lazy val root = (project in file(".")).
  settings(common).
  aggregate(finagle_core, finagle_thrift)

lazy val finagle_core =
  project.
    settings(common).
    settings(Seq(
      name := "finagle-core",
      libraryDependencies ++= Dependencies.finagle
    ))

lazy val finagle_thrift =
  project.
    settings(common).
    settings(Seq(
      name := "finagle-thrift",
      libraryDependencies ++= Dependencies.finagleThrift,
      scroogeThriftSourceFolder in Test <<= baseDirectory {
        base => {
          base / "target/thrift_external/"
        }
      },
      scroogeThriftDependencies in Test := Seq(
        "external-client"
      ),
      scroogeBuildOptions in Test := Seq(
        WithFinagle
      )
    )).dependsOn(finagle_core)

куда finagle_thrift зависит от файла JAR external-client в нем есть благотворительные файлы. Я хочу, чтобы извлечь файлы экономии target/thrift_external и скомпилируйте благотворительные файлы в клиент.

Это работает, однако я должен выполнить sbt дважды, чтобы заставить его работать. При первом запуске sbt он не извлекает файлы. Второй раз это делает. Я в недоумении относительно того, почему это происходит.

==

РЕДАКТИРОВАТЬ:

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

== РЕДАКТИРОВАТЬ 2:

Я решил это очень дерзким способом:

addCommandAlias("build", "; test:scroogeUnpackDeps; compile")

И теперь он сначала распаковывается, а затем компилируется

1 ответ

SBT решаетscroogeThriftSourceFolderкаталог, когда он загружается (перед запуском задач), и в этот момент внешних файлов еще нет.

Выполнениеreloadзаставит его обнаружить загруженные файлы:

      sbt scroogeUnpackDeps reload compile
Другие вопросы по тегам