2017-02-16 109 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. 

絕對非最佳實踐方法,但做這項工作。