Scala 禁用sbt子项目单据生成

Scala 禁用sbt子项目单据生成,scala,sbt,scaladoc,Scala,Sbt,Scaladoc,我在SBT中构建了一个多项目Scala,其中有一个根项目,它有效地聚合了两个子项目:一个宏库和一个使用该宏库的核心库 我正在使用这个优秀的插件为整个库(宏+核心组合)创建一个统一的scaladocAPI 不幸的是,sbt unidoc有一些限制。例如,默认情况下,它不会挂接到doc任务中,它的输出放在目标目录的unidoc文件夹中,而不是api文件夹中。在执行publish或publishLocal命令时,这些命令组合在一起可以防止生成和打包生成的文档。幸运的是(多亏了sbt unidocGit

我在SBT中构建了一个多项目Scala,其中有一个根项目,它有效地聚合了两个子项目:一个宏库和一个使用该宏库的核心库

我正在使用这个优秀的插件为整个库(宏+核心组合)创建一个统一的
scaladoc
API

不幸的是,
sbt unidoc
有一些限制。例如,默认情况下,它不会挂接到
doc
任务中,它的输出放在目标目录的
unidoc
文件夹中,而不是
api
文件夹中。在执行
publish
publishLocal
命令时,这些命令组合在一起可以防止生成和打包生成的文档。幸运的是(多亏了
sbt unidoc
GitHub站点上的
inkytonic
提出的),有一个简单的解决方案:

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
等,
根项目将为这两个子项目生成统一的文档,并且统一的文档将在发布期间打包

不幸的是,这些相同的命令还试图为
核心
子项目生成单独的子项目API文档,在我的特殊情况下,由于各种原因,这些命令将失败。更不用说生成两次文档需要时间

所以,我的问题是:有没有简单的方法来禁用每个子项目的
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)
有什么建议吗?

你可以说。在这种情况下

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

我相信这应该行得通。

好极了——它真的行得通!感谢您指出这一点,并提供文档链接。