sbt如何从git中提取依赖项工件?


102

我听说过(如果我只记得我在哪里的话,我也已经看过示例)sbt可以从git repo获取依赖项。

我正在寻找从github 获取依赖项harrah / up。该存储库不提供任何工件JAR文件,仅提供被设置为使用构建的源树sbt。我想象的过程是sbt将下载源存储库,进行构建,然后将其用作依赖项。

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

Answers:


77

确实是的。您可以给运算符Project一个依赖项dependsOn,并且可以通过其URI引用Github项目,例如RootProject(uri("git://github.com/dragos/dupcheck.git"))。或者,您可以创建git clone项目,然后使用引用本地副本RootProject(file(...))。有关详细信息和示例,请参见SBT Wiki上的“完整配置”


6
您知道是否可以将其包含在其中build.sbt吗?
欧文(Owen)

13
真知灼见。但是,如果该项目发生更改,您sbt将如何重新编译它?clean似乎没有帮助。
axel22 2012年

2
嗨,Axel22,您找到解决问题的任何方法了吗?
Jimmy Luong 2014年

4
在git repo是私有的情况下,如何配置呢?有没有一种方法可以配置SBT发送部署密钥,该密钥可以在点文件或环境变量中设置?
2016年

1
我还想知道如何在将新提交推送到github存储库后进行sbt pull更改,如果我将其指向#master,重新加载,将其克隆,则将新提交推送到master,而sbt仍可与最初克隆的存储库一起使用没有注意到新的提交。在这一点上,要么要么将其删除,/.sbt/0.13/staging/然后再次进行sbt克隆,要么去那里做git pull
lisak

99

您可以使用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以避免不必要的重新编译(请参阅此处的说明)。


7
sbt还能用“ git pull”保持本地git更新吗?还是我需要手动进行?
Arne

"my-project"使用项目根目录中的name := "MyProject"设置是否可以动态设置build.sbt
Danyel 2013年

2
git://在play / sbt 13.0中,协议语法似乎对我不起作用。https://虽然有效。这也可能是由git特定设置引起的。
塞巴斯蒂安·格拉夫

使用sbt 0.13.9和sbt使用浅层克隆(git clone --depth 1)正确更新git依赖关系。
马丁·塔普

2
该分支仅在设置master[error] No project 'project_name' in 'ssh://git@github.com/user/project.git#branch'
Neil

9

由于无法解决库的依赖关系(使用建议的方法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/


1
如果发生git clone错误,请尝试使用https uri版本。
WaldemarWosiński17年

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"))
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.