sbt 0.11 необходимо выполнить примеры задач - PullRequest
8 голосов
/ 11 ноября 2011

В моих проектах все еще используется 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?

1 Ответ

3 голосов
/ 12 ноября 2011

Вы можете определить задачу следующим образом:

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)

затем запустите вашу задачу с дополнительными реквизитами: my-task

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...