devshorts
devshorts

Reputation: 8872

Get scrooge to generate source files in test phase?

I have a multi module build that looks kind of like:

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)

Where finagle_thrift has a dependency on a jar file external-client that has thrift files in it. I want it to extract the thrift files to target/thrift_external and compile the thrift files into a client.

This does work, however I have to execute sbt twice to get it to work. The first time I run sbt, it doesn't extract the files. The second time it does. I am at a loss as to why that is happening.

==

EDIT:

I see whats happening. It does unpack the dependencies on test, however because the settings are evaluated before the unpack, the generated code doesn't get the list of files that are generated. The second time it runs, its already extracted so it picks up the thrift files

== EDIT 2:

I solved this in a super janky way:

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

And now it gets unpacked first, then compiled

Upvotes: 1

Views: 105

Answers (1)

Razvan
Razvan

Reputation: 3142

SBT resolves the scroogeThriftSourceFolder directory when it loads (before running the tasks) at which point the external files are not there yet.

Performing a reload will make it discover the downloaded files:

sbt scroogeUnpackDeps reload compile

Upvotes: 0

Related Questions