Scala sbt unidoc——如何从根项目中排除子模块
我正在使用插件构建复合API文档。我使用sbt的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的角度来看,类型定义了两次
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
显式删除项目,即使它们没有出现在聚合中