次のようなマルチモジュールビルドがあります。
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)
どこにthriftファイルをfinagle_thrift
含むjarファイルに依存しています。external-client
thrift ファイルを抽出して、thrift ファイルをtarget/thrift_external
クライアントにコンパイルします。
これは機能しますが、機能させるには sbt を 2 回実行する必要があります。初めて sbt を実行すると、ファイルが抽出されません。2回目です。なぜそれが起こっているのか、私は途方に暮れています。
==
編集:
何が起こっているかがわかります。テストで依存関係を解凍しますが、設定は解凍前に評価されるため、生成されたコードは生成されたファイルのリストを取得しません。2回目に実行すると、すでに抽出されているため、thriftファイルが選択されます
== 編集 2:
私はこれを非常にぎこちない方法で解決しました:
addCommandAlias("build", "; test:scroogeUnpackDeps; compile")
そして今、それは最初に解凍され、次にコンパイルされます