Подтвердить что ты не робот

Как я могу вызвать другую задачу из моей задачи SBT?

Я пытаюсь вызвать runTask внутри моей задачи и считал, что это сработает:

name := "hello"

version := "1.0"

scalaVersion := "2.10.2"

lazy val hello = taskKey[Unit]("executes hey")

lazy val helloTask = hello <<= runTask(fullClasspath, "sample.Hey" in run, runner in run)

Но, ну, это не так. Любые идеи о том, как я могу это сделать?

4b9b3361

Ответ 1

Общий ответ:

Чтобы ответить на ваш общий вопрос, решение заключается в том, чтобы ваша задача зависела от другой задачи. При непосредственном вызове задачи выполнялся бы конец системы зависимостей, системы параллельного выполнения и т.д. Вы зависите и вызываете такую ​​задачу (в синтаксисе в стиле 0,13):

myTask := {
  ...
  val result = otherTask.value
  ...
}

Обратите внимание, что otherTask будет вызываться до начала myTask, а не в точке тела myTask, где появляется зависимость; потому что это работает как зависимости.

Если по какой-либо причине вы считаете, что "обычный" способ неприемлем или неприемлем, считайте, что хороший стиль в sbt заключается в том, чтобы отделить объявление задачи от ее реализации. Типичная реализация задачи просто маршалирует аргументы, а затем вызывает метод, который фактически выполняет работу. Если задача, которую вы хотите вызвать, реализована таким образом, затем ответ на "Как мне вызвать задачу T?" это "Не надо, вызовите те же коды T-вызовов".

Конкретный ответ:

Но из вашего примера мне кажется, что проблема, которую вы на самом деле пытаетесь решить, - "Как я могу создать задачу пользовательского запуска в дополнение к запуску?" На этот вопрос ответят в FAQ sbt; см. http://www.scala-sbt.org/0.13.0/docs/faq.html. Ответ заключается в использовании удобных методов fullRunTask и fullRunInputTask.

Кстати, если вы посмотрите на исходный код этих методов, вы увидите, что они не делают задачу, которая вызывает другую задачу; скорее, они используют подход "называть тот же код".