如何使用DOC任务生成scaladoc后运行bash脚本?(How to run bash scri

2019-07-20 23:55发布

我有一个简短的bash脚本,做了查找和替换我Scaladoc的意见,以便生成链接到第三方库的外部文档。 我想这个脚本来运行我每次使用Scaladocs的生成时间doc任务。

我怎样才能做到这一点?

Answer 1:

这其实很容易。 首先,我检查文档,看看它是什么( 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.小的差异



Answer 2:

在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设置。



文章来源: How to run bash script after generating scaladoc using doc task?
标签: sbt scaladoc