我从GitHub分叉了一个Scala库,我想将它导入另一个项目。
如何告诉sbt在哪里找到这个包?
例如,我正在~/code/scala/myProgram
编写一个程序,我想从~/code/scala/otherlib
导入一个库。
答案 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存储库。支持适用于clone
和checkout
。请参阅我对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托管的项目 - 没有其他配置。