2

私は SBT でマルチプロジェクトの Scala ビルドを持っています。その中には、マクロ ライブラリとそのマクロ ライブラリを使用するコア ライブラリの 2 つのサブプロジェクトを効果的に集約するルート プロジェクトがあります。

私は優れたプラグインを使用して、ライブラリ全体 (マクロ + コアの組み合わせ) 用のsbt-unidoc単一の統合 API を作成しています。scaladoc

残念ながら、sbt-unidocいくつかの制限があります。たとえば、デフォルトでは、docタスクにフックされず、その出力はunidocフォルダーではなく、ターゲット ディレクトリのフォルダーに配置されapiます。これらを組み合わせると、publishまたはpublishLocalコマンドの実行時に結果のドキュメントが生成およびパッケージ化されなくなります。幸いなことに ( GitHubサイトで によって提起された問題のおかげで)、これには簡単な解決策があります。inkytonicsbt-unidoc

lazy val customUnidocSettings = unidocSettings ++ Seq (
  doc in Compile := (doc in ScalaUnidoc).value,
  target in unidoc in ScalaUnidoc := crossTarget.value / "api"
)

これらの設定は、ルート プロジェクトで使用されます。

lazy val macro = (project in file ("macro")).
  settings (
    name = "foo-macro"
  )

lazy val core = (project in file ("core")).
  settings (
    name = "foo-core"
  ).
  dependsOn (macro)

lazy val root = (project in file (".")).
  settings (customUnidocSettings: _*).
  settings (
    name = "foo"
  ).
  aggregate (macro, core)

docここで、sbt タスク、publishpublishLocalなどを実行すると、rootプロジェクトは 2 つのサブプロジェクトの統合ドキュメントを生成し、その統合ドキュメントは公開時にパッケージ化されます。

macro残念ながら、これらの同じコマンドは、サブプロジェクトとサブプロジェクトの両方の個々のサブプロジェクト API ドキュメントを生成しようとしますcoreが、私の特定のケースではさまざまな理由により、これらは失敗します。ドキュメントを 2 回生成するのに時間がかかることは言うまでもありません。

docだから、ここに私の質問があります:各サブプロジェクトのタスクを無効にする簡単な方法はありますか?

これまでに発見できた唯一の方法は、docScaladoc が埋め込まれたファイルがないと思い込ませることです。これは機能しますが、実際の解決策ではなく、ごまかしです。

lazy val noDocFileSettings = Seq (
  sources in doc in Compile := List()
)

lazy val macro = (project in file ("macro")).
  settings (noDocFileSettings: _*).
  settings (
    name = "foo-macro"
  )

lazy val core = (project in file ("core")).
  settings (noDocFileSettings: _*).
  settings (
    name = "foo-core"
  ).
  dependsOn (macro)

助言がありますか?

4

1 に答える 1

6

集計したいことを正確に言うことができます。この場合

lazy val root = (project in file (".")).
  settings (customUnidocSettings: _*).
  settings (
    name = "foo",
    aggregate in doc := false
  ).
  aggregate (macro, core)

うまくいくはずです、私は信じています。

于 2014-05-30T09:48:45.300 に答える