2014-11-03 18 views
11

meine gesamte Projektkonfiguration Angenommen, ist diese einfache build.sbt:Warum erscheint Scalaz in den API-Dokumenten meines Projekts?

scalaVersion := "2.11.4" 

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

Und dies ist mein Code:

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

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

Nun, wenn ich sbt doc und öffnen Sie die API-Dokumentation im Browser ausgeführt, sehe ich die scalaz Paket in der ScalaDoc Wurzelpaket Auflistung zusammen mit meinem Foo:

object Foo 
package scalaz 

Oder Sie bei mir nicht glauben:

scalaz package

ich das schon mit Scalaz bemerkt habe, und ich bin nicht der einzige, es zu (siehe currently published version des Argonaut zum Beispiel passiert, API-Dokumente). Ich bin mir nicht sicher, ob ich es bei einer anderen Bibliothek als Scalaz gesehen habe.

Wenn ich in meinem Projektcode nichts von Scalaz verwende, wird es nicht angezeigt. Das Gleiche passiert bei mindestens 2.10.4 und 2.11.4.

Warum erscheint das scalaz Paket hier und wie kann ich es stoppen?

Antwort

9

Ich bemerkte dies auch. Es passiert auch mit dem akka.pattern Paket von Akka sowie zum Beispiel dem upickle Paket aus dem Upwickle-Projekt.

Diese drei Pakete haben zwei Dinge gemeinsam:

  1. Sie sind Paketobjekte
  2. Sie definieren mindestens einen Typ in einem mixin Merkmal.

Also habe ich ein kleines Experiment mit zwei Projekten:

Projekt A:

trait SomeFunctionality { 
    class P(val s: String) 
} 

package object projectA extends SomeFunctionality 

Projekt B (abhängig von Projekt A):

package projectB 
import projectA._ 

object B extends App { 
    val p = new P("Test") 
} 

Und voila: in Die ScalaDoc von Projekt B erscheinen zwei Pakete im Root-Paket:

projectA 
projectB 

Es scheint, als ob beide oben genannten Kriterien erfüllt werden müssen, da die Beseitigung eines Problems das Problem löst.

Ich glaube, das ist ein Fehler im Scala-Compiler. Ich kann dir also nicht dabei helfen, dies zu vermeiden, denn die einzige Möglichkeit wäre, in diesem Fall die Scala-Quellen zu ändern. Alles in ProjectB zu ändern, außer alle Referenzen auf ProjectA zu entfernen, hat nicht geholfen.


aktualisieren: Es scheint, wie Sie den Compiler zu exclude specific packages from scaladoc anweisen kann.

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

So würde dies eine Abhilfe hier

+1

+1 und Dank sein! Ich lasse das jetzt offen, für den Fall, dass jemand einen Workaround hat, der Scalaz nicht ändert, aber das ist großartig. Irgendeine Idee, wenn es ein offenes Problem gibt? –

+1

@TravisBrown siehe mich update ... gibt es eine Problemumgehung. Ich habe kein passendes Problem gefunden. Nur ein paar geschlossene, die verdächtig aussehen. Ich werde es mir morgen genauer ansehen! –

+2

Ja, Paketobjekte sind bekannt als fehlerhaft. Übrigens hat @retronym in letzter Zeit an der Bereinigung gearbeitet: https://github.com/retronym/scala/compare/scala:2.12.x...ticket/8862-2 –