sbt 0.11运行所需的任务示例

时间:2011-11-11 18:14:58

标签: scala sbt

我的项目仍在使用sbt 0.7.7,我发现拥有可以从sbt提示符运行的实用程序类非常方便。我还可以将它与单独维护的属性结合使用 - 通常用于从主机更改为主机的环境相关值。这是我在project/build目录下的项目定义的一个示例:

class MyProject(info: ProjectInfo) extends DefaultProject(info) {
  //...
  lazy val extraProps = new BasicEnvironment {
    // use the project's Logger for any properties-related logging
    def log = MyProject.this.log
    def envBackingPath = path("paths.properties")
    // define some properties that will go in paths.properties
    lazy val inputFile = property[String]
  }

  lazy val myTask = task { args =>
    runTask(Some("foo.bar.MyTask"),
      runClasspath, extraProps.inputFile.value :: args.toList).dependsOn(compile)
      describedAs "my-task [options]"
  }   
}

然后我可以在sbt shell下使用我的任务my-task option1 option2

我在https://github.com/harrah/xsbt/wiki阅读了新的sbt 0.11文档,其中包括TasksTaskInputs部分,坦率地说,我仍然在努力完成我在0.7上所做的工作。 7。

似乎可以简单地将额外的属性替换为单独的environment.sbt,在project/build.scala中设置之前必须在build.sbt中定义任务。看起来还有完成支持,看起来非常有趣。

除此之外,我有点不知所措。我如何完成我对新sbt的所作所为?

1 个答案:

答案 0 :(得分:3)

您可以定义如下任务:

val myTask = InputKey[Unit]("my-task")

你的设置:

val inputFile = SettingKey[String]("input-file", "input file description")

您还可以定义一个新配置,如:

lazy val ExtraProps = config("extra-props") extend(Compile)

将此配置添加到项目中并使用它来设置此配置的设置:

lazy val root = Project("root", file(".")).config( ExtraProps ).settings(
  inputFile in ExtraProps := ...
  ...
  myTask in ExtraPops <<= inputTask { (argTask:TaskKey[Seq[String]]) =>
    (argTask, inputFile) map { (args:Seq[String], iFile[String]) =>
      ...
    }
  }
).dependsOn(compile)

然后使用extra-props启动你的任务:my-task