sbt-unidoc - 如何从RootProject中排除子模块

时间:2016-09-17 21:02:01

标签: scala sbt

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

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

val foo = RootProject(uri("git://github.com/Foo/Bar.git#v1.0.0"))

也就是说,在这个项目foo中,有两个子模块foo-db1foo-db2,它们包含相同的类型,但是针对不同的依赖库版本构建。

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

unidocProjectFilter in (ScalaUnidoc, unidoc) := inAnyProject -- inProjects(app)

如何从RootProject 为子模块创建标识符? 换句话说,我该怎么做:

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

1 个答案:

答案 0 :(得分:1)

答案在this entry中找到:您可以创建多个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来显式删除项目,即使它们没有出现在聚合中。