How can sbt pull dependency artifacts from git?
Yes indeed. You can give your Project
a dependency with the dependsOn
operator, and you can reference a Github project by its URI, for example RootProject(uri("git://github.com/dragos/dupcheck.git"))
. Alternatively, you can git clone
the project, and then reference your local copy with RootProject(file(...))
. See "Full Configuration" on the SBT wiki for details and examples.
Since I had problems getting the dependencies of my library resolved (using the suggested RootProject
) I'd like to point out to the object called ProjectRef
. Thus, if one need to depend on a library residing in git, I suggest to do so as follows:
import sbt.Keys._
import sbt._
object MyBuild extends Build {
lazy val root = Project("root", file("."))
.dependsOn(myLibraryinGit)
.settings(
...,
libraryDependencies ++= Seq(...))
lazy val myLibraryinGit = ProjectRef(uri("git://[email protected]:user/repo.git#branch"), "repo-name")
}
Source: http://blog.xebia.com/git-subproject-compile-time-dependencies-in-sbt/
I wanted to add an answer for sbt 0.13+. Just put something like this to your build.sbt
on project root folder (not Build.scala
):
lazy val root = (project in file(".")).dependsOn(playJongo)
lazy val playJongo = RootProject(uri("https://github.com/bekce/play-jongo.git"))
You can import unpackaged dependencies into your project from GitHub by treating them as project dependencies, using the dependsOn
operator. (This is distinct from the way that precompiled library dependencies are included).
Note that you can specify which branch to pull using #
notation. Here's some Scala SBT code that is working well for me:
object V {
val depProject = "master"
// Other library versions
}
object Projects {
lazy val depProject = RootProject(uri("git://github.com/me/dep-project.git#%s".format(V.depProject)))
}
// Library dependencies
lazy val myProject = Project("my-project", file("."))
.settings(myProjectSettings: _*)
.dependsOn(Projects.depProject)
.settings(
libraryDependencies ++= Seq(...
Note that if you have multiple SBT projects dependending on the same external project, it's worth setting up a central sbt.boot.directory
to avoid unnecessary recompilations (see instructions here).