定义任务依赖于项目级设置的所有项目

问题描述 投票:0回答:1

我有很多子项目的大型项目SBT。我想补充一点,我可以依赖于项目级设置(如name)任何项目运行任务。

在下面的例子中,我定义的任务myTask刚刚打印项目的名称:

name := "test-project"

val myTask = taskKey[Unit]("")

ThisBuild / myTask := {
  println((ThisProject / name).value)
}

val foo = project

val bar = project

我的目的是能够运行任何sbt foo/myTasksbt bar/myTask和具有执行相同的任务,但相应考虑到项目的设置。但是,如果我这样做,与上面的项目定义,我得到test-project无关印刷。

什么是实现我的目标预期的方式吗?

sbt
1个回答
0
投票

您可以创建一个需要位于AutoPlugin文件夹中的project

import sbt._
import sbt.Keys._

object TestPlugin extends AutoPlugin {

  object autoImport {
    val myTask = taskKey[Unit]("Prints project name")
  }

  import autoImport._

  override def trigger = allRequirements

  override def projectSettings: Seq[Def.Setting[_]] = {
    Seq(myTask := { println(name.value) })
  }
}

它会因为allRequirements和依赖关系的自动启用,从而myTask会附着在build.sbt定义的所有分项目

val foo = project

val bar = project

你可以用命令sbt "foo/myTask"sbt "bar/myTask"分别打印foobar进行测试。

© www.soinside.com 2019 - 2024. All rights reserved.