まずsbt-unidoc https://github.com/sbt/sbt-unidoc というsbt pluginの簡単な説明。(以下の説明は、現時点で最新の0.3.0という前提です)
- sbtでサブモジュールを分けた場合、標準ではそれぞれ個別のScaladocしか作れない
- sbt-unidocは、すべてのモジュールをまとめたScaladocを作るためのplugin
で、sbt-unidocの最低限の使い方としては、READMEの通りに
1. plugin.sbtにaddSbtPluginで依存加える
2. rootのプロジェクトの設定に unidocSettings を追加*1
して、"unidoc" と打つだけで、全部がまとまったScaladocが生成されます。その他色々機能があるので、あとはREADME読んでください。
さて、unidoc生成しても、それをどこかに置かないと意味がありません。置く場所の選択肢としてはgithub pageとか、色々あるわけですが、以前書いたこれ
sonatypeに特定のURLでアクセスすると、javadocやscaladocを展開して表示してくれる機能がある件
があるので、とりあえずunidocもsonatypeにpublishしておけば便利なのでは?
と思って、rootのプロジェクトから、publishSignedした際に、unidocも全部同時にpublishできるように設定を頑張ってみたら、数行足すだけでできました。
必要な部分だけ抜粋すると以下
import sbtunidoc.Plugin._ val root = Project("root", file(".")).settings( name := "この名前でpublishされるので、nameは適切に設定したほうがよい", unidocSettings ++ Seq( artifacts <<= Classpaths.artifactDefs(Seq(packageDoc in Compile)), packagedArtifacts <<= Classpaths.packaged(Seq(packageDoc in Compile)) ) ++ Defaults.packageTaskSettings( packageDoc in Compile, (UnidocKeys.unidoc in Compile).map{_.flatMap(Path.allSubpaths)} ): _* ).aggregate(その他のprojectの依存)
実際にコンパイル通る例と、生成後の例は以下のリンク先見てください。(sbt0.13.2で動作確認)
https://github.com/xuwei-k/httpz/blob/2361c8388e40206e25cbc79e3cfa9c3ae7b85239/project/Build.scala#L175-L184
https://oss.sonatype.org/service/local/repositories/releases/archive/com/github/xuwei-k/httpz-all_2.10/0.2.9/httpz-all_2.10-0.2.9-javadoc.jar/!/index.html
こうやって一度設定してしまえば、*2勝手にunidoc publishされるようになるので、面倒でないしおすすめです。sbtでライブラリをsonatypeにpublishしてる人は是非やってみましょう。
以前書いたけれど、sbt-releaseやsbt-sonatypeを組み合わせると
sbt-sonatypeとsbt-release pluginを組み合わせて使うサンプル - scalaとか・・・
更に便利です