为什么Scalaz出现在我项目的API文档中?

时间:2014-11-03 14:46:47

标签: scala documentation sbt scalaz scaladoc

假设我的整个项目配置都很简单build.sbt

scalaVersion := "2.11.4"

libraryDependencies += "org.scalaz" %% "scalaz-core" % "7.1.0"

这是我的代码:

import scalaz.Equal
import scalaz.syntax.equal._

object Foo {
  def whatever[A: Equal](a: A, b: A) = a === b
}

现在当我运行sbt doc并在浏览器中打开API文档时,我会看到ScalaDoc根目录包列表中的scalaz包以及我的Foo

object Foo
package scalaz

或者,如果你不相信我:

scalaz package

我以前用Scalaz注意到了这一点,而且我不是唯一遇到过的人(例如参见Argonaut API文档的currently published version)。我不确定我是否已经看到Scalaz以外的任何其他库。

如果我在项目代码中实际上没有使用Scalaz中的任何内容,则它不会显示出来。同样的事情发生在至少2.10.4和2.11.4。

为什么scalaz包显示在这里以及如何让它停止?

1 个答案:

答案 0 :(得分:9)

我也注意到了这一点。它也适用于Akka的akka.pattern包以及来自upickle项目的upickle包。

这三个包有两个共同点:

  1. 它们是包对象
  2. 他们在mixin特征中定义至少一种类型。
  3. 所以我做了两个项目的小实验:

    项目A:

    trait SomeFunctionality {
      class P(val s: String)
    }
    
    package object projectA extends SomeFunctionality
    

    项目B(取决于项目A):

    package projectB
    import projectA._
    
    object B extends App {
      val p = new P("Test")
    }
    

    瞧,在项目B的ScalaDoc中,根包中出现了两个包:

    projectA
    projectB
    

    似乎必须满足上述两个标准,因为消除一个标准可以解决问题。

    我相信这是scala编译器中的一个错误。所以我无法帮助你避免这种情况,因为唯一的办法就是在这种情况下改变scalaz的来源。除了删除对ProjectA的所有引用之外,更改ProjectB中的任何内容都无济于事。


    更新:您似乎可以指示编译器exclude specific packages from scaladoc

    scaladoc -skip-packages <pack1>:<pack2>:...:<packN> files.scala
    

    所以这将是一个解决方法