2015-09-15 2 views
1

Я новичок в разработке задач в SBT, и я пытаюсь выяснить, как создать задачу, которая интегрирует мой существующий код.Как создать задачу в SBT, которая вызывает метод?

В моем коде у меня есть объект одноплодной, который имеет run метод, который требует нескольких параметров

object MyObject { 
    def run(param1: String, param2: Int, param3: String, ...) = {} 
} 

Мой вопрос: Как я могу определить задачу в SBT, что вызывает мой run метод с указанием всех его параметров в мой файл build.sbt?

Я могу себе представить что-то подобное в build.sbt

lazy val myTask: TaskKey[Seq[File]] = taskKey[Seq[File]]("My task") 
lazy val myTaskRun = (sourceManaged, dependencyClasspath in Compile, runner in Compile, streams) map { (dir, cp, r, s) => 
    val param1 = ... 
    val param2 = ... 
    val param3 = ... 
    val paramN = .... 
    MyObject.run(param1, param2, param3, ...) 
    Seq(file("path")) 
    } 
+0

Если объект является частью вашей сборки, вы можете просто называть его так, как вы написали. Файл должен находиться в каталоге 'project' – dmitry

ответ

0

1. Вы можете использовать fullRunInputTask для этого.

В вашем build.sbt

lazy val example = InputKey[Unit]("example", "Run something.") 

fullRunInputTask(example, Compile, "somefun.CallMe") 

Под src/main/scala/somefun/CallMe.scala

package somefun 

object CallMe { 
    def main(args: Array[String]) : Unit = { 
    println("Params are: " + args.mkString(", ")) 
    } 
} 

Для вызова вашего использования задача example, например, "Пример 1 2 3"

2. Вы можете создать свой собственный InputTask

see InputTask in SBT Doc

Создание пользовательского InputTask позволяет гибко входной анализатор (с предложениями на вкладке), позволяет связь с другими задачами , Он просто интегрируется лучше в SBT.

Смежные вопросы