假设我的整个项目配置都很简单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注意到了这一点,而且我不是唯一遇到过的人(例如参见Argonaut API文档的currently published version)。我不确定我是否已经看到Scalaz以外的任何其他库。
如果我在项目代码中实际上没有使用Scalaz中的任何内容,则它不会显示出来。同样的事情发生在至少2.10.4和2.11.4。
为什么scalaz
包显示在这里以及如何让它停止?
答案 0 :(得分:9)
我也注意到了这一点。它也适用于Akka的akka.pattern
包以及来自upickle项目的upickle
包。
这三个包有两个共同点:
所以我做了两个项目的小实验:
项目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
所以这将是一个解决方法