プロジェクト参照を介して、Foo から Bar へのソース依存関係を宣言できます。
import sbt._
object FooBuild extends Build {
lazy val root = Project(
id = "foo",
base = file(".")
) dependsOn(theBarBuild)
lazy val theBarBuild = ProjectRef(
base = file("/path/to/bar"),
id = "bar")
}
これにより、Foo をコンパイルするたびに Bar も再コンパイルされます (変更されている場合)。id
プロジェクト参照の は Bar プロジェクトの実際の ID と一致する必要があることに注意してください。たとえば、単純なビルド定義 (ファイルのみ)default-edd2f8
を使用する場合などです。.sbt
この手法は、プラグインで特に役立ちます (このトピックに関する私のブログ投稿を参照してください)。
編集:
次のように、チェックアウト動作を再コーディングできます。
import sbt._
object FooBuild extends Build {
lazy val root = addCheckouts(Project(id = "foo", base = file(".")))
def addCheckouts(proj: Project): Project = {
val checkouts = proj.base.getCanonicalFile / "checkouts"
if (! checkouts.exists) proj
else proj.dependsOn(IO.listFiles(DirectoryFilter)(checkouts).map { dir =>
ProjectRef(base = dir, id = dir.name): ClasspathDep[ProjectReference]
}:_*)
}
}
これにより、プロジェクト ディレクトリでディレクトリがチェックcheckouts
され、存在する場合は、その中のディレクトリ (他のプロジェクトへのシンボリック リンクである必要があります) がプロジェクトへのプロジェクト参照として追加されます。シンボリック リンクには、リンクされたプロジェクトの実際の ID (default-edd2f8
または などbar
) のような名前が付けられることが期待されます。ディレクトリが存在しない場合、ビルドは以前と同じように機能します。
チェックアウト ディレクトリ (またはディレクトリ自体) でシンボリック リンクを追加または削除する場合は、Foo プロジェクトを再読み込みして変更を反映する必要があります。
お役に立てれば。