サブプロジェクトを使う場合の注意

Simple Build Toolではサブプロジェクトを利用する際に、複数のサブプロジェクトで同じ外部Jarを利用する場合であっても、それぞれのプロジェクト毎にJarファイルを保存する。これを防ぐには、外部Jar専用のプロジェクトを作成し、外部Jarを利用するプロジェクトはそのプロジェクトに依存するようにする。

以下のように記述すると、project1/lib_managed、及びproject2/lib_managed以下にlog4jのjarがコピーされる。

import sbt._

class Project(info: ProjectInfo) extends DefaultProject(info) {
  lazy val project1 = project("project1", "Project 1", x => new DefaultProject(x) {
    val protobuf  = "log4j" % "log4j" % "1.2.16"
  })

  lazy val project2 = project("project2", "Project 2", x => new DefaultProject(x) {
    val protobuf  = "log4j" % "log4j" % "1.2.16"
  })
}

これを以下のように外部Jar用のサブプロジェクトを作成するとexternaljars/lib_managed以下のみにlog4jのjarがコピーされ、その上でProject1, Project2からlog4jが利用できる。

import sbt._

class Project(info: ProjectInfo) extends DefaultProject(info) {
  lazy val externaljars = project("externaljars", "External Jar files", x => new DefaultProject(x) {
    val protobuf  = "log4j" % "log4j" % "1.2.16"
  })

  lazy val project1 = project("project1", "Project 1", x => new DefaultProject(x) {
  }, externaljars)

  lazy val project2 = project("project2", "Project 2", x => new DefaultProject(x) {
  }, externaljars)
}