我有一个多模块构建,看起来有点像:
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")
现在它首先被解包,然后被编译