2012-01-14 59 views
26

我已经配置SBT(0.11.0)作为依赖关系来引入GitHub项目,按照我对this question here的回答。如何刷新SBT中更新的Git依赖项构件?

它工作正常,但我似乎无法让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/)...

任何帮助非常感谢!

+3

已编译的github项目存在于'〜/ .sbt/staging /'? – 2012-01-14 18:51:25

+0

我遇到过'SNAPSHOT'常春藤依赖关系类似的问题,只有在sbt中运行'clean'后才能重新解决这个问题。 'clean'是否也解决了git依赖问题? – earldouglas 2012-01-14 20:19:13

+2

谢谢James,Kenji。 '干净'似乎不起作用 - 'rm -rf〜/ .sbt/staging /'做这项工作,但显然是核选项... – 2012-01-14 23:31:02

回答

-1

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

+1

不工作,我很害怕! – 2012-02-07 18:54:46

9

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

+1

为什么它不是自动的? – Roch 2013-05-23 09:33:42

+0

我认为如果您在创建项目时启用自动导入问题,Intellij会小心处理......不确定是否 – 2017-01-04 21:43:10

3

快速黑客可以添加到您的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将消灭该目录。这并不会做任何聪明的事情,比如检查提交,这将是一个很好的升级过程......我的机器上存储的~/.sbt/0.13/staging/的回购,您可能需要调整。