我有一个简短的bash脚本,做了查找和替换我Scaladoc的意见,以便生成链接到第三方库的外部文档。 我想这个脚本来运行我每次使用Scaladocs的生成时间doc
任务。
我怎样才能做到这一点?
我有一个简短的bash脚本,做了查找和替换我Scaladoc的意见,以便生成链接到第三方库的外部文档。 我想这个脚本来运行我每次使用Scaladocs的生成时间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.小的差异
在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
设置。