サードパーティライブラリの外部ドキュメントへのリンクを生成するために、Scaladocコメントを検索して置換する短いBashスクリプトがあります。タスクを使用してScaladocsを生成するたびに、このスクリプトを実行したいと思いdoc
ます。
どうすればこれを達成できますか?
それは実際にはかなり簡単です。まず、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
ます。