Как запустить скрипт bash после создания scaladoc с помощью задачи doc?

У меня есть короткий сценарий Bash, который выполняет поиск и замену моих комментариев Scaladoc, чтобы генерировать ссылки на внешнюю документацию сторонней библиотеки. Я хочу, чтобы этот скрипт запускался каждый раз, когда я генерирую Scaladocs с помощью задачи doc.

Как я могу этого добиться?


person Ryan    schedule 04.03.2013    source источник


Ответы (2)


На самом деле это довольно легко. Сначала я проверил doc, чтобы узнать, что это такое (inspect doc в приглашении sbt), заметил, что это задача, и приступил к объявлению зависимости от себя в build.sbt:

doc in Compile <<= doc in Compile map { (file) =>
  Seq("bash", "-c", "ls >tmp.log").! // CWD is sbt's current dir
  file
}

Я использовал для выполнения bash ту же библиотеку, что и scala.sys.process, так что вы можете найти Scaladoc для этого. Это было протестировано на SBT 0.12.2, и я думаю, что может быть небольшая разница на SBT 0.11.x или 0.10.x.

person Daniel C. Sobral    schedule 05.03.2013

В sbt 0.13 и последних версиях вариант использования также может быть достигнут с помощью макросов := и .value (которые оба нацелены на то, чтобы быть проще, чем <<=):

doc in Compile := {
  val f = (doc in Compile).value
  // execute a shell script if you want with sbt's Process API
  // http://www.scala-sbt.org/0.13/docs/Process.html
  val ec = (baseDirectory.value / "myBashScript.sh").getAbsolutePath !
  val log = streams.value.log
  log.debug(s"Exit code: $ec")
  f
}

Вам также может понравиться метод triggeredBy для следующих задач:

lazy val runMyBashScriptTask = taskKey[Unit]("Run myBashScript")

runMyBashScriptTask := {
  val ec = (baseDirectory.value / "myBashScript.sh").getAbsolutePath !
  val log = streams.value.log
  log.debug(s"Exit code: $ec")
}

runMyBashScriptTask <<= runMyBashScriptTask triggeredBy (doc in Compile)

Предполагается, что myBashScript.sh находится в основном каталоге проекта, как указано в настройке baseDirectory.

person Jacek Laskowski    schedule 01.08.2014