2017-02-16 69 views
0

SBT具有管理项目依赖项的功能,您可以在其中直接引用现有的github项目。SBT在启动时执行自定义任务

val projectA = RootProject(uri("git://github.com/....")) 
    val projectB = Project("projectB", file(".")) dependsOn(project) 

不幸的是,由于现有错误 - 在相关项目(了projectA)的任何更改将不会反映在使用这种依赖关系(项目B),即使你叫sbt update项目。

https://github.com/sbt/sbt/issues/1284

它看起来并不像他们很快就会修复它。

但有解决方法: How do I refresh updated Git dependency artifacts in SBT? 删除~/.sbt/staging/帮助。显然,这种移除应该在项目加载的早期阶段发生。

我已经创建了简单的删除任务,并将其定义为对update任务的依赖关系 - 但它看起来已经太晚了,并且无法按预期工作。

[info] Loading project definition from projectB 
// next 4 stages are skipped if it's already cloned. 
// Cloning into ... projectA 
// [info] Loading project definition from projectA 
// [info] Updating projectA 
// [info] Done updating. 
[info] Updating projectB <<<--- where the removal is happening, too late... 

我可以依赖的任务是什么?

回答

0

至于知道,我找到了以下解决方案。 我只是在我build.sbt定义的方法,返回空Seq并进行必要的拆卸,而我直接在项目定义,在这里被定义设置,调用它:

lazy val commonSettings = doRemove ++ Seq(... other settings. 

绝对非最佳实践方法,但做这项工作。