4

scaladoc 生成については、 sbt のドキュメントに従おうとしています。一般的な設定用のマルチ プロジェクト (つまり、サブプロジェクトを含む集計) ビルドがあり./build.sbtます。次の例の最後のエントリを追加しました。

scalacOptions in ThisBuild ++= Seq("-deprecation", "-unchecked", "-feature")

scalacOptions in ThisBuild += "-no-specialization"

// API docs
scalacOptions in ThisBuild in (Compile,doc) ++= Seq(
  "-diagrams", "-doc-title", name.value
)

これは何の効果もありません。scaladoc は図を生成しようとせず、メイン ドキュメントのタイトルも設定しないため、これらの設定は単純に無視されます。同様に、"-foobar"オプションを追加してもエラーは表示されません。

これを修正する方法 ( ではbuild.sbt、 には行きたくありませんproject/Build.scala、ありがとう)

4

2 に答える 2

6

ジョシュが言ったように、どういうわけかThisBuild/のThisProjectものは互いに上書きします。

project/Build.sbt解決策は、 を sbt 0.12 からに移行することでした。幸いなことに、sbt 0.13 では多くの通常の Scala コードを受け入れるようになったため ( s ではありませんが...) build.sbt、これはほとんどがコピー アンド ペーストでした。object

次に定義しました

lazy val commonSettings = Project.defaultSettings ++ Seq(
  ...
  scalacOptions  ++= Seq(
    "-no-specialization",
    // "-Xelide-below", "INFO", // elide debug logging!
    "-deprecation", "-unchecked", "-feature"
  ),
  // API docs:
  scalacOptions in (Compile, doc) ++= Seq(
    "-diagrams",
    "-diagrams-dot-path", "/usr/local/bin/dot",
    // "-diagrams-dot-timeout", "20", "-diagrams-debug",
    "-doc-title", name.value
  ),
  ...
)

そして、それは機能します。


最後の厄介なビットは の要件です"-diagrams-dot-path"。これはオープン ソース プロジェクトであるため、これは本当に最悪です。そのパスを他の人に強制したくありません。一体なぜ、これ含まdotれているのに見つからないのですか?$PATH/user/local/bin

于 2013-11-15T20:29:49.553 に答える
2

そのため、タスクで inspect を実行すると、docsbt が探している設定が次のようになっていることがわかります。

scalacOptions in ThisProject in (Compile, doc)

ThisBuildscalaVersions のように、プロジェクト間で再利用される (またはそのように共有される) もののために予約されています。

ここでの問題は、scalacOptions in ThisProject in (Compile,doc)最初に から読み取ってからscalacOptions in ThisProject in Compile、チェックするscalacOptions in ThisProject前に に移動することThisBuildです。

ほとんどの場合、scalacOptions がより高い優先順位で指定されており、設定が無視されます。を削除する必要がin ThisBuildあり、ルート プロジェクトで動作するはずです。

于 2013-11-15T20:00:46.137 に答える