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

Owe*_*wen 101 git scala build sbt build-dependencies

我听说过(而且我知道我也见过一些例子,只要我能记得哪里)sbt可以从git repo获得依赖.

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

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

Ale*_*ean 98

您可以使用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(...
Run Code Online (Sandbox Code Playgroud)

请注意,如果您有多个依赖于同一外部项目的SBT项目,则值得设置一个中心sbt.boot.directory以避免不必要的重新编译(请参阅此处的说明).

  • 可以sbt还保持本地git更新"git pull"?或者我需要手动执行此操作吗? (7认同)
  • `git://`协议语法在play/sbt 13.0中似乎不适用于我.`https://`虽然有效.这也可能是由git特定设置引起的. (2认同)
  • 该分支仅在设置为“master”时才有效,否则我会得到:“[error] No project 'project_name' in 'ssh://git@github.com/user/project.git#branch'` (2认同)

Kip*_*ros 78

确实是的.您可以为运算符Project提供依赖关系,例如dependsOn,可以通过URI引用Github项目RootProject(uri("git://github.com/dragos/dupcheck.git")).或者,您可以git clone在项目中,然后引用您的本地副本RootProject(file(...)).有关详细信息和示例,请参阅SBT wiki上的"完整配置".

  • 很有见地.但如果该项目发生变化,你如何强迫`sbt`重新编译呢?`clean`似乎没有帮助. (13认同)
  • 你知道是否可以在`build.sbt`中包含它? (6认同)
  • 如何在git repo是私有的情况下配置它?有没有办法配置SBT发送部署密钥,可以在dotfile或环境变量中设置? (4认同)
  • 您好Axel22,您找到了解决问题的方法吗? (2认同)

Mar*_*hli 8

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

}
Run Code Online (Sandbox Code Playgroud)

资料来源:http://blog.xebia.com/git-subproject-compile-time-dependencies-in-sbt/


bek*_*kce 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"))
Run Code Online (Sandbox Code Playgroud)