如何从自定义任务执行runMain?

时间:2014-10-07 19:52:24

标签: sbt

我正在使用sbt v0.13.5

在我的项目中,我想要一个可以接受一些输入(单个字符串)的sbt任务,对它做一些工作并吐出一些输出(再次,一个字符串)。我在我的项目中创建了一个帮助程序类,我可以通过sbt runMainsbt "runMain com.example.utils.ClassName someArgument")从终端调用它。

我想要的是为自己节省一些打字并且有一个sbt任务来执行此操作。我希望能够键入sbt doThing withStuff并拥有一个名为doThing的taskKey,它使用要运行的类的名称以及传入的参数来调用runMain

我知道如何创建任务,但我似乎无法弄清楚如何从build.sbt中的自定义任务定义中调用runMain。有人能指出我正确的方向吗?

2 个答案:

答案 0 :(得分:12)

TaskKey[Unit]("myTask") := (runMain in Compile).toTask(" com.example.Main arg1 arg2").value

runMainInputTask。自{0.1}以来,InputTask具有toTask方法。

答案 1 :(得分:1)

如果有人想使用基于设置计算的参数运行主类,您需要dynamic tasks。例如:

val myRun = taskKey[Unit]("...")

myRun := Def.taskDyn {
  val appName = name.value
  Def.task {
    (runMain in createApi in Compile)
      .toTask(s" com.softwaremill.MyMain $appName")
      .value
  }
}.value