我的项目仍在使用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文档,其中包括Tasks和TaskInputs部分,坦率地说,我仍然在努力完成我在0.7上所做的工作。 7。
似乎可以简单地将额外的属性替换为单独的environment.sbt
,在project/build.scala
中设置之前必须在build.sbt
中定义任务。看起来还有完成支持,看起来非常有趣。
除此之外,我有点不知所措。我如何完成我对新sbt的所作所为?
答案 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