如何在SBT中刷新更新的Git依赖项工件?

时间:2012-01-14 18:20:57

标签: scala sbt

根据this question here上的答案,我已将SBT(0.11.0)配置为将GitHub项目作为依赖项引入。

它工作正常,但我似乎无法让SBT在更新时重新编译我的Git依赖项。换句话说:如果我对依赖项进行更新,请转到Git并重新加载项目的SBT并运行package,然后SBT在编译项目时不会重新编译外部Git依赖项。

我尝试在我的Git依赖项中创建一个新分支(例如,forcenew)并更新我的SBT项目配置中的分支以使用它:

lazy val depProject = RootProject(uri("git://github.com/me/dep-project.git#forcenew"))

但即使这样也不会强制刷新。我有点难过 - 我甚至无法找到SBT将Git项目编入其中的位置(它似乎不在~/.sbt/~/.ivy2/中)...

任何帮助都非常感谢!

4 个答案:

答案 0 :(得分:20)

来自:https://github.com/sbt/sbt/issues/335

这应该在0.12.0中修复,只需调用“sbt update”

已在0.12.0中修复,因此sbt update已足够but got back in 13.0 - 目前,您必须手动从~/.sbt/staging/删除依赖

答案 1 :(得分:9)

您可能希望清除~/.sbt/staging/

答案 2 :(得分:4)

您可以添加到build.sbt的快速黑客:

def removegit = Command.command("removegit"){state =>
  val home = sys.env("HOME")
  val k = ("rm -rf "+ home + "/.sbt/0.13/staging/").!
  state
}

commands ++= Seq(removegit)

然后sbt removegit将擦除该目录。这没有像检查提交那样聪明的事情,这将是一个很好的升级... repos存储在我的机器上的~/.sbt/0.13/staging/,你可能需要调整它。

答案 3 :(得分:-1)

尝试从〜/ .ivy2 / cache /中删除要重新加载的特定项目,然后执行'sbt update'。