2014-10-06 75 views
1

如何從任務代碼中清除SBT中的相關項目?如何從任務執行依賴項目中的清理任務?

我已經在此之前相關問題檢查:

但我開始有點用奇怪的語法丟失。

我已經試過這樣:

projectDependencies.value.foreach { p => 
    System.out.println(s"Cleaning ${p.name}") 
    (clean.all(ScopeFilter(inProjects(new LocalProject(p.name))))).value 
} 

但SBT抱怨動態範圍:

非法動態參考:P

+0

你到底想達到什麼目的?你爲什麼不依靠sbt來了解何時刷新其他依賴項目?什麼是用例? – 2014-10-08 19:43:39

+0

我想自動創建一個發佈工件,並且還想清理依賴項目,以保證一切正常。在Android上下文中,我有時候在沒有完全清理時會遇到問題(ProGuard緩存未更新,...) – 2014-10-09 07:53:04

+0

爲什麼不在您要釋放的項目中執行'clean',然後執行您用來執行的命令發佈? – 2014-10-09 08:06:51

回答

1

使用下面的build.sbt

val selectDeps = ScopeFilter(inDependencies(ThisProject)) 

clean in Compile := clean.all(selectDeps).value 
0

基於由亞採郭先生(感謝)提供的解決方案,這裏是一個更完整的片段:

val cleanDependencies = taskKey[Seq[Unit]]("Clean dependencies of current project") 

lazy val MyProject = project.settings(Seq(
    cleanDependencies <<= clean.all(ScopeFilter(inDependencies(ThisProject))), 
    package <<= package.dependsOn(clean, cleanDependencies) 
): _*)