如何可以从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/