我的项目仍在使用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]"
}
}
Run Code Online (Sandbox Code Playgroud)
然后我可以my-task option1 option2
在sbt shell下使用我的任务.
我在https://github.com/harrah/xsbt/wiki上阅读了新的sbt 0.11文档,包括有关Tasks和TaskInputs的部分,坦率地说,我仍然在努力完成我在0.7.7上所做的工作.
似乎额外的属性可以简单地替换为单独的environment.sbt
,必须在project/build.scala
设置之前定义任务build.sbt
.看起来还有完成支持,看起来非常有趣.
除此之外,我有点不知所措.我如何完成我对新sbt的所作所为?
您可以这样定义任务:
val myTask = InputKey[Unit]("my-task")
Run Code Online (Sandbox Code Playgroud)
和你的设置:
val inputFile = SettingKey[String]("input-file", "input file description")
Run Code Online (Sandbox Code Playgroud)
您还可以定义新配置,例如:
lazy val ExtraProps = config("extra-props") extend(Compile)
Run Code Online (Sandbox Code Playgroud)
将此配置添加到您的项目中并使用它来设置此配置的设置:
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)
Run Code Online (Sandbox Code Playgroud)
然后使用 extra-props:my-task 启动你的任务