107

我听说过(而且我知道我也看过一些例子,只要我记得在哪里)sbt可以从 git repo 获取依赖项。

我希望从 github获取依赖项 harrah/up 。该存储库不提供任何工件 JAR 文件,仅提供一个源树,它设置为使用sbt. 我想象的过程是sbt下载源代码库,构建它,然后将其用作依赖项。

我可能在想象sbt实际上可以做这样的事情。它可以?如果是这样,怎么办?

4

4 回答 4

103

您可以使用运算符将​​未打包的依赖项从 GitHub 导入到您的项目中,方法是将它们视为项目依赖dependsOn项。(这与包含预编译库依赖项的方式不同)。

#请注意,您可以使用符号指定要提取的分支。这是一些对我来说效果很好的 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以避免不必要的重新编译(请参阅此处的说明)。

于 2012-01-12T00:48:35.007 回答
77

确实是的。你可以给你Project的运营商一个依赖dependsOn,你可以通过它的 URI 引用一个 Github 项目,例如RootProject(uri("git://github.com/dragos/dupcheck.git")). 或者,您可以git clone项目,然后使用RootProject(file(...)). 有关详细信息和示例,请参阅SBT wiki 上的“完整配置” 。

于 2011-09-26T03:40:45.147 回答
10

由于我在解决我的库的依赖项时遇到了问题(使用建议的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/

于 2015-09-17T11:03:24.007 回答
8

我想为 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"))
于 2017-12-15T07:52:49.073 回答