我听说(而且我知道我也见过一些例子,只要我能记住哪里)sbt
可以从git repo获得依赖。
我希望从github获取依赖项harrah/up。存储库不提供任何工件JAR文件,只提供设置为使用sbt
构建的源树。我想象的过程是sbt
将下载源代码,构建它,然后将其用作依赖项工件。
我可能想象sbt
实际上可以做这样的事情。它可以?如果是这样,怎么样?
答案 0 :(得分:93)
您可以使用dependsOn
运算符将未打包的依赖项从GitHub导入到项目中,方法是将它们视为项目依赖项。 (这与预编译库依赖项的包含方式不同。)
请注意,您可以使用#
表示法指定要拉出的分支。这里有一些适合我的Scala SBT代码:
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(...
请注意,如果您有多个依赖于同一外部项目的SBT项目,则值得设置一个中心sbt.boot.directory
以避免不必要的重新编译(请参阅instructions here)。
答案 1 :(得分:76)
Project
运算符为dependsOn
提供依赖关系,并且可以通过其URI引用Github项目,例如RootProject(uri("git://github.com/dragos/dupcheck.git"))
。或者,您可以git clone
项目,然后使用RootProject(file(...))
引用您的本地副本。有关详细信息和示例,请参阅SBT wiki上的"Full Configuration"。
答案 2 :(得分:7)
由于我在解决我的库的依赖关系时遇到了问题(使用建议的RootProject
),我想指出名为ProjectRef
的对象。因此,如果需要依赖于驻留在git中的库,我建议如下:
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://git@github.com:user/repo.git#branch"), "repo-name")
}
来源:http://blog.xebia.com/git-subproject-compile-time-dependencies-in-sbt/
答案 3 :(得分:6)
我想为sbt 0.13+添加一个答案。只需将这样的内容放到项目根文件夹build.sbt
上(不是Build.scala
):
lazy val root = (project in file(".")).dependsOn(playJongo)
lazy val playJongo = RootProject(uri("https://github.com/bekce/play-jongo.git"))