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

标签 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 文档,我看到 scalaz ScalaDoc 根包列表中的包,以及我的 Foo :
object Foo
package scalaz

或者,如果你不相信我:

scalaz package

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

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

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

最佳答案

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

这三个包有两个共同点:

  • 它们是包对象
  • 他们在 mixin trait 中定义了至少一种类型。

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

    项目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
    

    所以这将是一种解决方法

    关于scala - 为什么 Scalaz 会出现在我项目的 API 文档中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26716592/

    相关文章:

    visual-studio - 将代码文档生成到 MS Word 文件

    scala - 无法在 SBT 中运行 Apache Spark 相关单元测试 - NoClassDefFoundError

    java - 如何在Play框架应用程序中编写junit测试用例

    java - SBT 不会编译 HelloWorld ScalaFX 示例,提示类路径中缺少 javafx

    regex - 匹配行尾的换行符

    drupal - 下载 Drupal 文档?

    scala - Akka:从回调中向自己发送消息是否安全?

    ruby - 试图找到手册的引用但找不到

    json - 如何通过忽略字段名区分大小写来使用 circe 在 scala 中解码 json

    scala - 读取输入文本文件列表,其中各个文件名包含逗号