我想在一些子项目上执行cleanAll
任务clean
。我不想仅仅为了clean
而使用聚合。
当我们使用子模块时,我们遇到了play的资产路径问题。
如何创建新任务,但如何在子项目上调用任务?
答案 0 :(得分:3)
根据Jacek Laskowski的例子,我提出了以下插件,该插件应放在/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)
可以通过调用cleanAll
答案 1 :(得分: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: _*)