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)

どこにthriftファイルをfinagle_thrift含むjarファイルに依存しています。external-clientthrift ファイルを抽出して、thrift ファイルをtarget/thrift_externalクライアントにコンパイルします。

これは機能しますが、機能させるには sbt を 2 回実行する必要があります。初めて sbt を実行すると、ファイルが抽出されません。2回目です。なぜそれが起こっているのか、私は途方に暮れています。

==

編集:

何が起こっているかがわかります。テストで依存関係を解凍しますが、設定は解凍前に評価されるため、生成されたコードは生成されたファイルのリストを取得しません。2回目に実行すると、すでに抽出されているため、thriftファイルが選択されます

== 編集 2:

私はこれを非常にぎこちない方法で解決しました:

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

そして今、それは最初に解凍され、次にコンパイルされます

4

0 に答える 0