Scala入門記008 sbtでマルチプロジェクト その1
ご無沙汰してしまっていました。。。
しばらく前に下書きしたマルチプロジェクトの記事を清書してみました。
ある程度のプロジェクトであれば、複数のサブプロジェクトに分けて開発することも多くなります。
モジュールを分けたり、ビルド単位を分けたかったり事情は色いろあるとは思いますが、分けると色々便利だったりします。
そういうことでsbtのマルチプロジェクトを試してみたいと思います。
基本的に始める sbt - マルチプロジェクト・ビルドの内容から試してみます。
Scala入門記の目次はこちらです。
ビルドの定義
まずはビルド定義だけ作成してみます。
ディレクトリ構成はこんな感じです。
- build.sbt
- project
- Build.scala
- project1
- build.sbt
- project2
- build.sbt
build.sbt
これは普通のsbtプロジェクトと同様です。
Scala入門記003 初めてのsbt - うさばかSE Blog3の時とnameだけ違います。
このプロジェクトを(一般的かはわかりませんが)ルートプロジェクトと呼びます。
name := "scala-sample-002" version := "1.0" scalaVersion := "2.10.3"
project1/build.sbt
「サブプロジェクト1」としてproject1というディレクトリを用意しました。
このビルド定義はproject1ディレクトリにbuild.sbtという名前で配置しました。
ルートプロジェクトと同様にnameだけが変えてあります。
name := "scala-sample-002-1" version := "1.0" scalaVersion := "2.10.3"
project2/build.sbt
「サブプロジェクト2」も同様にproject2というディレクトリを用意しbuild.sbtという名前で配置しました。
これもnameだけが異なります。
name := "scala-sample-002-2" version := "1.0" scalaVersion := "2.10.3"
project/Build.scala
順序が前後しましたが最後に本命のビルド定義ファイルです。
本当はこのファイルだけですべてが記述できるのですが、build.sbtとBuild.scalaと分けて徐々に慣れていく作戦です。
import sbt._ object ScalaSample002Build extends Build { lazy val root = Project( id = "scala-sample-002", base = file(".") ) aggregate(project1, project2) lazy val project1 = Project( id = "scala-sample-002-1", base = file("project1") ) lazy val project2 = Project( id = "scala-sample-002-2", base = file("project2") ) }
root, project1, project2の3つのプロジェクトを定義しています。
aggregateというメソッドでrootにproject1とproject2を関連させている感じでしょうか。