.sbtファイルは0.13でさまざまな方法で改善され、マルチプロジェクトビルドを指定できるようになったと聞きました。
http://www.scala-sbt.org/0.13.0/docs/Community/ChangeSummary_0.13.0.html#sbt-format-enhancements 。sbtファイルでサブプロジェクトを定義できるようになったと述べています。また、ルート内の複数の.sbtファイルが1つの概念ファイルに集約されることも知っています。
しかし、私が本当に望んでいるのは、12個のサブプロジェクト.sbtファイルでルートを汚染しないことです。サブプロジェクトbuild.sbtファイルをそれぞれのサブディレクトリにスローし、それらの間の共通コードをどこかで共有し、サブプロジェクトを集約するプロジェクト全体のルートbuild.sbtを作成する方法はありますか?私は現在.scalaファイルで同様の設定をしていますが、可能であれば.sbtファイルを使用したいと思います。
それが不可能な場合、.sbtファイルを使用して大規模なマルチプロジェクトビルドを構築する「正しい」方法は何ですか?
0.12では、サブプロジェクトのベースディレクトリに.sbt
ファイルを配置でき、そこでの設定がそのプロジェクトのスコープに含まれるようになっているはずです。
コードは、.sbt
に通常の.scala
ファイルを作成することにより、project/
ファイル間で再利用されます。 project/
のコードは、.sbt
ファイルで使用できるようになります。 1つの.sbt
の定義は、少なくとも0.13では、他の.sbt
ファイルには表示されません。これは主に実装上の制限であり、将来のバージョンでこれが解除されるかどうかは未定です。
デフォルトのルートプロジェクトは、subProject/build.sbt
で定義されたプロジェクトからのものを含むすべてのサブプロジェクトを集約します。
現在の難しさはそれを明白にすることです。たとえば、ルートディレクトリの次のbuild.sbt
は、sub/
のサブプロジェクトを定義します。これは完全な定義であり、プロジェクトのID、ベースディレクトリなどを定義します。
<root>/build.sbt
lazy val sub = project
ただし、<sub>/build.sbt
で定義されているものを参照することはできません。 (sub/build.sbt
の存在は、<root>/build.sbt
がコンパイルされて評価されるまでわかりません。)したがって、sub
が何を集約するかを明示的に定義するには、次のようなものが必要です。
sub/build.sbt
lazy val sub = project.in(file(".")).aggregates(subSub)
//or: lazy val sub = project in file(".") aggregate subSub
lazy val subSub = project
ただし、これはsub
の定義と重複しています。
今後可能な解決策は、次のようにルート定義を単なる参照にすることです。
<root>/build.sbt
lazy val sub = LocalProject("sub")