В моих проектах все еще используется 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]"
}
}
Затем я могу использовать свою задачу как my-task option1 option2
в оболочке sbt.
Я прочитал новую документацию по sbt 0.11 на https://github.com/harrah/xsbt/wiki, включая разделы по Задачам и TaskInputs , и, честно говоря, я все еще пытаюсь понять, как это сделать. Я сделал на 0.7.7.
Кажется, что дополнительные свойства могут быть просто заменены на отдельный environment.sbt
, задачи должны быть определены в project/build.scala
перед их установкой в build.sbt
. Похоже, что есть поддержка завершения, что выглядит очень интересно.
Помимо этого, я несколько поражен. Как мне сделать то, что я сделал с новым sbt?