SBT:覆盖多项目build.sb中的sbt run任务

时间:2016-02-08 14:31:45

标签: scala sbt multi-project

我想覆盖run任务的默认行为,以便预处理传递给sbt命令的参数,并在具有不同参数的特定子项目上调用run任务(取决于自定义逻辑)。 这是build.sbt文件的一个示例:

lazy val core = (project in file("core"))
lazy val bar = (project in file("bar"))
lazy val foo = (project in file("foo"))
run := Runner.buildRunTask(bar, foo).value.evaluated

buildRunTask使用新实现覆盖任务。代码如下:

    def buildRunTask(runnableProjects:Project*) : Initialize[InputTask[Unit]] = 
    Def.inputTask { 
        val args: Seq[String] = spaceDelimited("<arg>").parsed
        val availableProjects = runnableProjects.map(_.id).mkString(",")
        if (args.length == 0) throw new IllegalStateException(s"you need to specify a valid command. Available commands are: '$availableProjects'")

        val command = args head
        val project = runnableProjects.find(_.id == command)
          .getOrElse(throw new IllegalStateException(s"invalid command '$command'. Available command are: $availableProjects"))

        val newArgs = transformArgs(args.rest)

        //TODO: how I can compile and execute the run task only for the project passed as argument? I want something like project.runTask(newArgs) ?
    }

你有什么建议吗?

谢谢!

此致

詹卢卡

0 个答案:

没有答案