如何在SBT中创建一个调用方法的任务?

时间:2015-09-15 06:36:13

标签: scala sbt

我是SBT中新开发的任务,我正在试图找出如何创建一个集成现有代码的任务。

在我的代码中,我有一个单例对象,其run方法需要多个参数

object MyObject {
    def run( param1: String, param2: Int, param3: String, ...) = {}
}

我的问题是:如何定义SBT中调用run方法指定其build.sbt文件中所有参数的build.sbt方法中的任务?

我可以在lazy val myTask: TaskKey[Seq[File]] = taskKey[Seq[File]]("My task") lazy val myTaskRun = (sourceManaged, dependencyClasspath in Compile, runner in Compile, streams) map { (dir, cp, r, s) => val param1 = ... val param2 = ... val param3 = ... val paramN = .... MyObject.run( param1, param2, param3, ...) Seq(file("path")) }

中想象出这样的事情
private void Form1_Load(object sender, EventArgs e)
{
    SetValuesOnSubItems(this.menuStrip1.Items.OfType<ToolStripMenuItem>().ToList());
}

private void SetValuesOnSubItems(List<ToolStripMenuItem> items)
{
    items.ForEach(item =>
            {
                var dropdown = (ToolStripDropDownMenu)item.DropDown;
                if (dropdown != null)
                {
                    dropdown.ShowImageMargin = false;
                    SetValuesOnSubItems(item.DropDownItems.OfType<ToolStripMenuItem>().ToList());
                }
            });
}

1 个答案:

答案 0 :(得分:1)

<强> 1。您可以使用fullRunInputTask

在你的build.sbt

lazy val example  = InputKey[Unit]("example", "Run something.")

fullRunInputTask( example, Compile, "somefun.CallMe")

src/main/scala/somefun/CallMe.scala

package somefun

object CallMe {
  def main(args: Array[String]) : Unit = {
    println("Params are: " + args.mkString(", "))
  }
}

要使用example来呼叫您的任务,例如&#34;示例1 2 3&#34;

<强> 2。您可以创建自己的InputTask

see InputTask in SBT Doc

创建自定义InputTask允许灵活的输入解析器(在选项卡上有建议),允许链接其他任务。它简单地集成到SBT中。