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

Emi*_*mil 6 sbt

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

我怎么能告诉sbt在哪里找到这个包?

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

Mik*_*len 11

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

cd ~/code/scala/otherlib
sbt publish-local
Run Code Online (Sandbox Code Playgroud)

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

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

libraryDependencies += "com.some_company" % "otherlib" % "1.0.0"
Run Code Online (Sandbox Code Playgroud)

到你的build.sbt文件.

现在,当你建立你的项目时,会发现otherlib在你的本地常春藤库(就像它自己被从一个普通仓库拉低),并使用它的定制版本.

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


Jac*_*ski 9

SBT支持开箱即用的git存储库.支持是为clonecheckout.请参阅我的回答可以SBT刷新git uri依赖(总是或按需)?或者使用Git本地存储库作为SBT项目中的依赖项?,归结为以下内容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
Run Code Online (Sandbox Code Playgroud)

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

  • 便利?!你一定在开玩笑.这是sbt的杀手锏!你应该考虑更频繁地使用它来欣赏它的美丽.希望有更好的支持git项目,尤其是.为`更新'. (2认同)