禁用sbt子项目doc生成

时间:2014-05-29 15:44:52

标签: scala sbt scaladoc

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

我使用优秀的sbt-unidoc插件为整个库(宏+核心组合)创建一个统一的scaladoc API。

不幸的是,sbt-unidoc有一些限制。例如,默认情况下,它不会挂钩到doc任务,并且其输出放在目标目录的unidoc文件夹中,而不是api文件夹中。结合使用,可以防止在执行publishpublishLocal命令时生成和打包生成的文档。幸运的是(感谢inkytonicsbt-unidoc GitHub 网站上lazy val customUnidocSettings = unidocSettings ++ Seq ( doc in Compile := (doc in ScalaUnidoc).value, target in unidoc in ScalaUnidoc := crossTarget.value / "api" ) 提出的an issue,这是一个简单的解决方案:

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任务publishpublishLocalroot等,macro项目将生成两个子项目的统一文档和统一文档在出版期间打包。

不幸的是,这些相同的命令也会尝试为coredoc子项目生成单独的子项目API文档 - 并且由于各种原因,在我的特定情况下,这些将失败。更不用说两次生成文档需要时间。

所以,这是我的问题:是否有任何简单的方法可以为每个子项目禁用doc任务?

到目前为止,我能够发现的唯一方法是让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) 认为没有嵌入Scaladoc的文件。这是有效的,但它是一个软糖,而不是一个真正的解决方案:

{{1}}

有什么建议吗?

1 个答案:

答案 0 :(得分:5)

你可以说exactly what you want to aggregate。在这种情况下

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

应该有用,我相信。