私は SBT でマルチプロジェクトの Scala ビルドを持っています。その中には、マクロ ライブラリとそのマクロ ライブラリを使用するコア ライブラリの 2 つのサブプロジェクトを効果的に集約するルート プロジェクトがあります。
私は優れたプラグインを使用して、ライブラリ全体 (マクロ + コアの組み合わせ) 用のsbt-unidoc
単一の統合 API を作成しています。scaladoc
残念ながら、sbt-unidoc
いくつかの制限があります。たとえば、デフォルトでは、doc
タスクにフックされず、その出力はunidoc
フォルダーではなく、ターゲット ディレクトリのフォルダーに配置されapi
ます。これらを組み合わせると、publish
またはpublishLocal
コマンドの実行時に結果のドキュメントが生成およびパッケージ化されなくなります。幸いなことに ( GitHubサイトで によって提起された問題のおかげで)、これには簡単な解決策があります。inkytonic
sbt-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 タスク、publish
、publishLocal
などを実行すると、root
プロジェクトは 2 つのサブプロジェクトの統合ドキュメントを生成し、その統合ドキュメントは公開時にパッケージ化されます。
macro
残念ながら、これらの同じコマンドは、サブプロジェクトとサブプロジェクトの両方の個々のサブプロジェクト API ドキュメントを生成しようとしますcore
が、私の特定のケースではさまざまな理由により、これらは失敗します。ドキュメントを 2 回生成するのに時間がかかることは言うまでもありません。
doc
だから、ここに私の質問があります:各サブプロジェクトのタスクを無効にする簡単な方法はありますか?
これまでに発見できた唯一の方法は、doc
Scaladoc が埋め込まれたファイルがないと思い込ませることです。これは機能しますが、実際の解決策ではなく、ごまかしです。
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)
助言がありますか?