2016-09-17 37 views
0

我正在使用sbt-unidoc插件构建复合API文档。我使用sbt的RootProject构造函数将URI链接到GitHub上的各种项目。sbt-unidoc - 如何从RootProject中排除子模块

这些项目的一个具有相互排斥的子项目:

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

也就是说,在这个项目中富,有两个子模块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

答案位于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明确地删除项目,即使它们没有出现在汇总中。