Плагин SBT - выполнить пользовательскую задачу перед компиляцией - PullRequest
0 голосов
/ 18 мая 2018

Я только что написал свой первый SBT Autoplugin, у которого есть пользовательская задача, которая генерирует файл настроек (если файл еще не существует).Все работает, как и ожидалось, когда задача вызывается явно, но я бы хотел, чтобы она автоматически вызывалась до компиляции проекта с использованием плагина (без изменения проекта в файле build.sbt).Есть ли способ сделать это, или мне нужно как-то переопределить команду compile?Если так, может ли кто-нибудь указать мне на примеры этого?Любая помощь будет принята с благодарностью!(Приношу свои извинения, если я упустил что-то простое!) Спасибо!

Ответы [ 2 ]

0 голосов
/ 17 апреля 2019
val runSomeShTask = TaskKey[Unit]("runSomeSh", " run some sh")
    lazy val startrunSomeShTask = TaskKey[Unit]("runSomeSh", " run some sh")
    startrunSomeShTask := {
      val s: TaskStreams = streams.value
      val shell: Seq[String] = if (sys.props("os.name").contains("Windows")) Seq("cmd", "/c") else Seq("bash", "-c")
      // watch out for those STDOUT , SDERR redirection, otherwise this one will hang after sbt test ... 
      val startMinioSh: Seq[String] = shell :+ " ./src/sh/some-script.sh"
      s.log.info("set up run some sh...")
      if (Process(startMinioSh.mkString(" ")).! == 0) {
        s.log.success("run some sh setup successful!")
      } else {
        throw new IllegalStateException("run some sh setup failed!")
      }
    }

    // or only in sbt test 
    // test := (test in Test dependsOn startrunSomeShTask).value
    (compile in Compile) := ((compile in Compile) dependsOn startrunSomeShTask).value
0 голосов
/ 18 мая 2018

Вы можете определить зависимости между задачами с помощью dependsOn и переопределить поведение задачи с заданной областью (например, compile in Compile) с помощью переназначения it.

Следующие строки добавлены в *Примером может служить файл 1007 *:

lazy val hello = taskKey[Unit]("says hello to everybody :)")

hello := { println("hello, world") }

(compile in Compile) := ((compile in Compile) dependsOn hello).value

Теперь при каждом запуске compile будет напечатано hello, world:

[IJ]sbt:foo> compile
hello, world
[success] Total time: 0 s, completed May 18, 2018 6:53:05 PM

Этот пример был протестирован сSBT 1.1.5 и Scala 2.12.6.

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