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