21

JDK のクラスを scaladoc で生成されたドキュメントにリンクしようとしています。-doc-external-docscaladoc 2.10.1のオプションを使用しましたが、成功しませんでした。

を使用していますが、代わりに の-doc-external-doc:/usr/lib/jvm/java-7-openjdk-amd64/jre/lib/rt.jar#http://docs.oracle.com/javase/7/docs/api/ようなリンクが表示されます。このオプションは、scaladoc で生成されたドキュメントに対してのみ機能するようです。index.html#java.io.Fileindex.html?java/io/File.html

scaladoc のオプションを見逃していましたか、それとも機能リクエストに記入する必要がありますか?

次のようにsbtを構成しました。

 scalacOptions in (Compile,doc) += "-doc-external-doc:/usr/lib/jvm/java-7-openjdk-amd64/jre/lib/rt.jar#http://docs.oracle.com/javase/7/docs/api"

注: 私はOpts.doc.externalAPI次の sbt 0.13 でこのユーティリティを見てきました。ModuleIDa の代わりに aを渡すのが良い追加 (可能かどうかはわかりません) だと思いますFile。util は、どのファイルがModuleID.

4

2 に答える 2

7

私はsbt 0.13.5を使用しています。

scaladoc 内に Javadoc リンクを持つ機能をすぐに使用できる方法はありません。私の理解では、それは sbt のせいではなく、scaladoc の動作の仕方に問題があるということです。Joshがコメントで指摘したように、scaladocに報告する必要があります。

しかし、私が思いついた回避策があります -生成さdocれたscaladocを後処理して、Java URLが置き換えられて適切なJavadocリンクを形成するようにします。

ファイルscaladoc.sbtは sbt プロジェクト内に配置する必要があり、docタスクが実行されるたびに、タスクによる後処理が開始さfixJavaLinksTaskれます。

ハードコードされたパスがたくさんあるので、注意して使用してください (適切と思われる方法で研磨を行うこともできます)。

import scala.util.matching.Regex.Match

autoAPIMappings := true

// builds -doc-external-doc
apiMappings += (
    file("/Library/Java/JavaVirtualMachines/jdk1.8.0_11.jdk/Contents/Home/jre/lib/rt.jar") -> 
    url("http://docs.oracle.com/javase/8/docs/api")
)

lazy val fixJavaLinksTask = taskKey[Unit](
    "Fix Java links - replace #java.io.File with ?java/io/File.html"
)

fixJavaLinksTask := {
  println("Fixing Java links")
  val t = (target in (Compile, doc)).value
  (t ** "*.html").get.filter(hasJavadocApiLink).foreach { f => 
    println("fixing " + f)
    val newContent = javadocApiLink.replaceAllIn(IO.read(f), fixJavaLinks)
    IO.write(f, newContent)
  }
}

val fixJavaLinks: Match => String = m =>
    m.group(1) + "?" + m.group(2).replace(".", "/") + ".html"

val javadocApiLink = """\"(http://docs\.oracle\.com/javase/8/docs/api/index\.html)#([^"]*)\"""".r

def hasJavadocApiLink(f: File): Boolean = (javadocApiLink findFirstIn IO.read(f)).nonEmpty

fixJavaLinksTask <<= fixJavaLinksTask triggeredBy (doc in Compile)
于 2014-08-01T00:10:08.347 に答える