5

サードパーティライブラリの外部ドキュメントへのリンクを生成するために、Scaladocコメントを検索して置換する短いBashスクリプトがあります。タスクを使用してScaladocsを生成するたびに、このスクリプトを実行したいと思いdocます。

どうすればこれを達成できますか?

4

2 に答える 2

5

それは実際にはかなり簡単です。まず、doc を調べて ( inspect docsbt プロンプトで) それが何であるかを確認し、それがタスクであることに気付き、それ自体への依存関係を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 ではわずかな違いがあると思います。

于 2013-03-05T02:33:42.447 に答える
1

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ます。

于 2014-08-01T19:01:18.700 に答える