SBT在启动时执行自定义任务

时间:2017-02-16 13:11:12

标签: git scala sbt

SBT具有管理项目依赖关系的功能,您可以直接引用现有的github项目。

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

不幸的是,由于存在错误 - 依赖项目(projectA)中的任何更改都不会反映在使用此依赖项(projectB)的项目中,即使您调用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...

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

1 个答案:

答案 0 :(得分:0)

至于知道,我找到了以下解决方案。 我刚刚在我的build.sbt中定义了方法,返回空Seq并执行必要的删除,我直接在项目定义中调用它,其中定义了设置:

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

绝对不是最佳实践方法,但是做了工作。