Sbt 如何在使用doc任务生成scaladoc后运行bash脚本?

Sbt 如何在使用doc任务生成scaladoc后运行bash脚本?,sbt,scaladoc,Sbt,Scaladoc,我有一个简短的Bash脚本,它对我的Scaladoc注释进行查找和替换,以便生成指向第三方库的外部文档的链接。我希望每次使用doc任务生成Scaladocs时都能运行此脚本 我怎样才能做到这一点呢?其实很简单。首先,我检查了文档以查看它是什么(sbt提示符上的inspect doc),注意到它是一个任务,然后继续在build.sbt上声明对自身的依赖: doc in Compile <<= doc in Compile map { (file) => Seq("bash",

我有一个简短的Bash脚本,它对我的Scaladoc注释进行查找和替换,以便生成指向第三方库的外部文档的链接。我希望每次使用
doc
任务生成Scaladocs时都能运行此脚本


我怎样才能做到这一点呢?

其实很简单。首先,我检查了文档以查看它是什么(sbt提示符上的
inspect doc
),注意到它是一个任务,然后继续在
build.sbt
上声明对自身的依赖:

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

在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
}
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)