Scala sbt unidoc——如何从根项目中排除子模块

Scala sbt unidoc——如何从根项目中排除子模块,scala,sbt,Scala,Sbt,我正在使用插件构建复合API文档。我使用sbt的RootProject构造函数和URI链接到GitHub上的各种项目 其中一个项目具有相互排斥的子项目: val foo = RootProject(uri("git://github.com/Foo/Bar.git#v1.0.0")) 也就是说,在这个项目foo中,有两个子模块foo-db1和foo-db2,它们包含相同的类型,但根据不同的依赖项库版本构建 现在,当我尝试运行unidoc时,它失败了,因为从unidoc的角度来看,类型定义了两次

我正在使用插件构建复合API文档。我使用sbt的
RootProject
构造函数和URI链接到GitHub上的各种项目

其中一个项目具有相互排斥的子项目:

val foo = RootProject(uri("git://github.com/Foo/Bar.git#v1.0.0"))
也就是说,在这个项目foo中,有两个子模块
foo-db1
foo-db2
,它们包含相同的类型,但根据不同的依赖项库版本构建

现在,当我尝试运行
unidoc
时,它失败了,因为从unidoc的角度来看,类型定义了两次。从文档中,我可以看到有一个过滤函数:

unidocProjectFilter in (ScalaUnidoc, unidoc) := inAnyProject -- inProjects(app)
但是如何从我的
RootProject
为子模块创建标识符呢? 换句话说,我将如何做到这一点:

unidocProjectFilter in (ScalaUnidoc, unidoc) := inAnyProject --
  inProjects(foo).SELECT_SUB_PROJECT(foo-v1)

答案是:不使用
RootProject
,而是创建许多
ProjectRef
实例

import UnidocKeys._

val fooURI = uri("git://github.com/Foo/Bar.git#v1.0.0")
val fooDb1 = ProjectRef(fooURI, "foo-db1") // sub-module I don't want
val fooDb2 = ProjectRef(fooURI, "foo-db2") // sub-module I want

val root = (project in file("."))
  .settings( ... )
  .settings(unidocSettings: _*)
  .settings(site.settings ++ ghpages.settings: _*)
  .settings(
    unidocProjectFilter in (ScalaUnidoc, unidoc) := 
      inAnyProject -- inProjects(fooDb1)
  )
  .aggregate(fooDb2)
请注意,只将
fooDb2
放在聚合中,而将
fooDb1
放在外面,没有任何效果。不管怎样,unidoc似乎总是包含所有子模块,因此必须使用
unidocProjectFilter
显式删除项目,即使它们没有出现在聚合中