11

假设我的整个项目配置很简单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 文档时,我会scalaz在 ScalaDoc 根包列表中看到该包,以及我的Foo

object Foo
package scalaz

或者,如果你不相信我:

斯卡拉兹包

我之前在 Scalaz 中注意到了这一点,而且我不是唯一一个发生这种情况的人(例如,参见当前发布的 Argonaut API 文档版本)。我不确定我是否在 Scalaz 以外的任何库中看到过这种情况。

如果我在项目代码中实际上没有使用 Scalaz 中的任何东西,它就不会出现。同样的事情至少发生在 2.10.4 和 2.11.4 上。

为什么scalaz包裹会出现在这里,我怎样才能让它停止?

4

1 回答 1

9

我也注意到了这一点。akka.pattern来自 Akka 的包以及upickle来自 upickle 项目的包也会发生这种情况。

这三个包有两个共同点:

  1. 它们是包对象
  2. 它们在 mixin 特征中定义了至少一种类型。

所以我做了两个项目的小实验:

项目一:

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 中的任何内容都无济于事。


更新:似乎您可以指示编译器从 scaladoc 中排除特定包

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

所以这将是一个解决方法

于 2014-11-03T16:22:13.600 回答