2014-10-07 13 views
3

我想拍一個cleanAll,它在多個子項目上執行clean任務。我不想僅爲了clean而使用聚合。如何在不使用聚合的情況下執行調用子項目上乾淨的任務?

當我們使用子模塊時,我們遇到了遊戲的資產路線問題。

有關如何創建新任務的詳細記錄,但是如何在子項目上調用任務?

+0

您對根打電話乾淨 - 這對子項目呼籲乾淨。 – 2014-10-07 21:08:15

+0

不,它不,只有當你聚合,我想避免。 – Jaap 2014-10-08 06:40:38

+0

從根目錄或'find'運行'cleanFiles'。 -name target | xargs rm -Rf' – 2014-10-08 11:56:11

回答

3

基於由亞採郭先生的例子我來以下插件應放在您的/project文件夾中:

import sbt._ 
import sbt.AutoPlugin 
import sbt.Keys._ 
import sbt.plugins.JvmPlugin 

object CleanAllPlugin extends AutoPlugin { 

    val cleanAll = taskKey[Unit]("Cleans all projects in a build, regardless of dependencies") 

    override def requires = JvmPlugin 

    override def projectSettings = Seq(
    cleanAllTask 
) 

    def cleanAllTask = cleanAll := Def.taskDyn { 
    val allProjects = ScopeFilter(inAnyProject) 
    clean.all(allProjects) 
    }.value 
} 

插件現在可以添加到根項目用途:

val main = Project("root", file(".")) 
    .enablePlugins(CleanAllPlugin) 

它可以在SBT執行致電:cleanAll

1

使用以下build.sbt

val selectDeps = ScopeFilter(inDependencies(ThisProject)) 

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

它假定build.sbt文件是在已經clean自身和dependsOn項目執行該項目。

如果你需要它project/Build.scala,只需添加以下內容:

val selectDeps = ScopeFilter(inDependencies(ThisProject)) 
val cleanInSubprojects = Seq(
    clean in Compile := clean.all(selectDeps).value 
) 

,並添加cleanInSubprojects到每一個項目的設置:

// definition of a project goes here 
    .settings(cleanInSubprojects: _*) 
+0

Build.scala文件如何做到這一點? – Jaap 2014-10-10 08:09:09

+0

查看更改。 – 2014-10-10 08:14:28

+0

它不起作用:( – Jaap 2014-10-10 12:51:13

相關問題