У меня есть многопроектная сборка Scala в SBT, в которой у меня есть корневой проект, который эффективно просто объединяет два подпроекта: библиотеку макросов и основную библиотеку, которая использует эту библиотеку макросов.Отключить создание дочернего подпроекта sbt
Я использую отличный плагин sbt-unidoc
, чтобы создать единый унифицированный API scaladoc
для всей библиотеки (макро + ядро в сочетании).
К сожалению, sbt-unidoc
имеет некоторые ограничения. Например, по умолчанию он не подключается к задаче doc
, а ее вывод помещается в папку unidoc
целевого каталога, а не в папку api
. В сочетании они предотвращают создание и упаковку результирующей документации при выполнении команд или publishLocal
. К счастью (и благодаря an issue поднятый inkytonic
на сайте sbt-unidoc
GitHub), есть простое решение этой проблемы:
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)
сейчас , если вы выполняете задачи sbt doc
, publish
, publishLocal
и т. д. проект root
будет генерировать единую документацию для двух подпроектов и что унифицированная документация будет упакована во время публикации катион.
К сожалению, эти же команды также пытаются сгенерировать отдельную документацию API подпроекта для подпроектов macro
и core
- и по разным причинам в моем конкретном случае они не сработают. Не говоря уже о том, что для создания документации требуется время.
Итак, вот мой вопрос: существует ли какой-либо простой способ отключить задачу для каждого подпроекта?
Единственный подход, который я смог обнаружить до сих пор, заключается в том, чтобы обмануть 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)
Любые предложения?
Отлично - он отлично работает! Спасибо, что указали это, и ссылку на документацию. –