如何将SBT项目从GitHub导入库克隆到本地目录?

时间:2014-03-16 03:39:30

标签: sbt

我从GitHub分叉了一个Scala库,我想将它导入另一个项目。

如何告诉sbt在哪里找到这个包?

例如,我正在~/code/scala/myProgram编写一个程序,我想从~/code/scala/otherlib导入一个库。

2 个答案:

答案 0 :(得分:11)

如果您克隆的项目支持它(即,如果它支持SBT并配置为发布到存储库),则可以使用 sbt 命令{{1}在本地发布它}}。例如:

sbt publish-local

这将在您的本地Ivy存储库(通常为cd ~/code/scala/otherlib sbt publish-local )中构建和发布此库。请注意,每次修改~/.ivy2/local来源时都需要重复此操作。

将项目本地发布到本地Ivy存储库之后,您可以将otherlib指定为SBT项目中的依赖项,使用常规SBT依赖项来分叉库的原始版本(假设你还没有改变它的ID,版本,组ID等。例如,添加:

otherlib

到您的libraryDependencies += "com.some_company" % "otherlib" % "1.0.0" 文件。

现在,当您构建您的项目时,它会在您的本地Ivy存储库中找到build.sbt(就好像它已从常规存储库中下载)并将使用你的自定义版本。

如果otherlib不支持SBT,或者没有配置为发布到存储库,并且您不想修改它以执行此操作,那么您只需复制其.jar文件到项目的otherlib目录(/lib)。

答案 1 :(得分:9)

SBT支持开箱即用的git存储库。支持适用于clonecheckout。请参阅我对Can SBT refresh git uri dependency (always or on demand)?Using Git local repository as dependency in SBT project?的回答,归结为build.sbt中的以下内容:

lazy val gitRepo = "git:file:///Users/jacek/sandbox/so/sbt-git/git-repo/#master"

lazy val g = RootProject(uri(gitRepo))

lazy val root = project in file(".") dependsOn g

一旦定义了依赖项(项目之间),就可以使用它 - git托管的项目 - 没有其他配置。