gpt4 book ai didi

scala - 禁用 sbt 子项目文档生成

转载 作者:行者123 更新时间:2023-12-02 01:04:42 27 4
gpt4 key购买 nike

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

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

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

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 任务 docpublishpublishLocal 等,root 项目将为两个子项目生成统一文档,并在发布时打包统一文档。

不幸的是,这些相同的命令还试图为 macrocore 子项目生成单独的子项目 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)

有什么建议吗?

最佳答案

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

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

应该可以,我相信。

关于scala - 禁用 sbt 子项目文档生成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23937344/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com