我在SBT中有一个多项目Scala构建,其中我有一个根项目,它有效地聚合了两个子项目:一个宏库和一个使用该宏库的核心库。
我使用优秀的sbt-unidoc
插件为整个库(宏+核心组合)创建一个统一的scaladoc
API。
不幸的是,sbt-unidoc
有一些限制。例如,默认情况下,它不会挂钩到doc
任务,并且其输出放在目标目录的unidoc
文件夹中,而不是api
文件夹中。结合使用,可以防止在执行publish
或publishLocal
命令时生成和打包生成的文档。幸运的是(感谢inkytonic
在sbt-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任务publish
,publishLocal
,root
等,macro
项目将生成两个子项目的统一文档和统一文档在出版期间打包。
不幸的是,这些相同的命令也会尝试为core
和doc
子项目生成单独的子项目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}}
有什么建议吗?
答案 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)
应该有用,我相信。