1

我有一个多模块构建,看起来有点像:

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)

Wherefinagle_thrift依赖于external-client其中包含 thrift 文件的 jar 文件。我希望它提取节俭文件target/thrift_external并将节俭文件编译到客户端中。

这确实有效,但是我必须执行 sbt 两次才能使其正常工作。我第一次运行 sbt 时,它不会提取文件。第二次这样。我不知道为什么会这样。

==

编辑:

我看到发生了什么。它确实解压缩了测试的依赖关系,但是因为在解压缩之前评估了设置,所以生成的代码不会获得生成的文件列表。第二次运行时,它已经被解压了,所以它会拾取 thrift 文件

== 编辑 2:

我以一种超级笨拙的方式解决了这个问题:

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

现在它首先被解包,然后被编译

4

0 回答 0