我想拍一個cleanAll
,它在多個子項目上執行clean
任務。我不想僅爲了clean
而使用聚合。如何在不使用聚合的情況下執行調用子項目上乾淨的任務?
當我們使用子模塊時,我們遇到了遊戲的資產路線問題。
有關如何創建新任務的詳細記錄,但是如何在子項目上調用任務?
我想拍一個cleanAll
,它在多個子項目上執行clean
任務。我不想僅爲了clean
而使用聚合。如何在不使用聚合的情況下執行調用子項目上乾淨的任務?
當我們使用子模塊時,我們遇到了遊戲的資產路線問題。
有關如何創建新任務的詳細記錄,但是如何在子項目上調用任務?
基於由亞採郭先生的例子我來以下插件應放在您的/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
使用以下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: _*)
您對根打電話乾淨 - 這對子項目呼籲乾淨。 – 2014-10-07 21:08:15
不,它不,只有當你聚合,我想避免。 – Jaap 2014-10-08 06:40:38
從根目錄或'find'運行'cleanFiles'。 -name target | xargs rm -Rf' – 2014-10-08 11:56:11