【问题标题】:Create a new task that runs a program创建一个运行程序的新任务
【发布时间】:2012-03-30 23:10:09
【问题描述】:

我需要定义一个自定义任务来计算主类的名称,然后运行它。我在想这样的事情

customTask {
  mainClass = compute main class name based on env
  runMain(mainClass, jvm-args, fork=true)
}

然后在 SBT 中我就可以运行了

sbt> 自定义任务

这可以在 SBT 11.2 中完成吗?

【问题讨论】:

  • 你还在坚持 0.11 吗?如果您可以升级到 0.13,请参阅视觉的答案。在 0.11 上,简短的版本是您不能重用 runMain 任务,而是查看 sbt 源代码,查看该任务执行的调用,然后在您自己的任务中执行相同的调用。

标签: scala sbt


【解决方案1】:

好吧,你可以试一试..我工作得很好 -

lazy val testngRun = inputKey[Unit]("custom run task for testng")

testngRun := {
    val one = (runMain in Compile).fullInput(" org.testng.TestNG -testclass com.pg.acceptance.testcase.PfsLoginServiceTest").evaluated
}

【讨论】:

  • 请注意 fullInput 方法直到 0.13 版本才添加到 sbt。
【解决方案2】:

迟到的答案,但您可以创建新的 SBT 任务,如文档 http://www.scala-sbt.org/release/docs/Detailed-Topics/Tasks#defining-a-new-task 中所述

您可以运行任何 scala 代码作为任务代码。任务也可以接受输入参数。

相当强大的 IMO。

【讨论】:

  • 链接的文档很好,但是要注意页面顶部的版本组合框,因为不同的sbt版本之间存在很大差异。
  • 这里的问题是重用现有输入任务的功能,例如runMain。见github.com/sbt/sbt/issues/407
猜你喜欢
  • 1970-01-01
  • 2015-01-28
  • 1970-01-01
  • 2018-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-21
  • 1970-01-01
相关资源
最近更新 更多