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

我听说过(我知道我也看过一些例子,只要我能记得它在哪里) sbt可以从git sbt获得依赖关系。

我正在寻找从github获得依赖harrah / up 。 版本库不提供任何工件JAR文件,只有使用sbt构build的源代码树。 我想象的过程是, sbt将下载源代码回购,构build它,然后将其用作依赖项构件。

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

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

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

由于我得到解决我的库的依赖关系的问题(使用build议的RootProject ),我想指出一个名为ProjectRef的对象。 因此,如果需要依靠一个藏在git中的图书馆,我build议如下:

 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/2015/06/26/git-subproject-compile-time-dependencies-in-sbt/