我在SBT中有一个Scala项目,在运行时它需要访问一些XML文件,我想从git中获取并在构建时放入类路径。这些XML来自我无法控制的外部git存储库,因此我无法合并这两个存储库。
我看到SBT允许你添加unmanagedResourceDirectories
和managedResoureDirectories
(不确定区别是什么),这允许你指示SBT将目录添加到类路径,但我不确定如何从git repo获取目录,而不是磁盘上的实际目录。
答案 0 :(得分:1)
您可以使用JGit library在本地克隆repo,并使用archive
命令将文件复制到repo之外。作为示例,请参阅sbt-hackling插件如何实现此目的。
如果您不需要平台独立性,可以通过调用命令行git命令并组合clone
/ fetch
来更新依赖项,archive
来提取文件
将一些路径复制出本地存储库的代码部分:
// needed for installSource
// maybe implement some archiver to go directly to files?
org.eclipse.jgit.archive.ArchiveFormats.registerAll()
def installSource(cachedRepo: Git, paths: Seq[String], revision: ObjectId, target: File): Set[File] =
IO.withTemporaryFile(target.getName, ".zip") { tmp =>
val out = new BufferedOutputStream(new FileOutputStream(tmp))
cachedRepo
.archive()
.setFormat("zip")
.setTree(revision)
.setPaths(paths :_*)
.setOutputStream(out)
.call()
IO.unzip(tmp, target)
}
在本地克隆repo的部分代码:
def downloadGitRepo(local: File)(repo: URI): File = {
val clone = Git
.cloneRepository()
.setURI(repo.toString)
.setDirectory(local)
.setBare(true)
.call()
assert(local.exists())
local
}