【问题标题】:How to execute runMain from custom task?如何从自定义任务执行 runMain?
【发布时间】:2014-12-02 08:36:34
【问题描述】:

我正在使用 sbt v0.13.5

在我的项目中,我想要一个 sbt 任务,它可以接受一些输入(单个字符串),对其进行一些工作并返回一些输出(同样,单个字符串)。我在我的项目中创建了一个辅助类,我可以通过sbt runMain (sbt "runMain com.example.utils.ClassName someArgument") 从终端调用它。

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

我知道如何创建任务,但我似乎不知道如何从我的 build.sbt 中的自定义任务定义中调用runMain。谁能指出我正确的方向?

【问题讨论】:

标签: sbt


【解决方案1】:
TaskKey[Unit]("myTask") := (runMain in Compile).toTask(" com.example.Main arg1 arg2").value

runMain 是一个InputTaskInputTask 从 0.13.1 开始就有 toTask 方法。

【讨论】:

  • 多么聪明单行来定义任务键并调用:=
  • 不错的一个!伙计们,不要小看toTask(" com.example.Main arg1 arg2") 中的空白,它不是拼写错误,也不是格式错误,这是必需的。
【解决方案2】:

如果有人想使用基于设置计算的参数运行主类,您需要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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-07
    • 1970-01-01
    • 1970-01-01
    • 2020-09-06
    相关资源
    最近更新 更多