0

当我尝试从 sbt 任务中调用 scaladoc 时,我遇到了 MissingRequirementError。

使用任何版本的 sbt 0.13.x,从这个开始build.sbt

val scaladoc = taskKey[Unit]("run scaladoc")

scaladoc := {
  import scala.tools.nsc._
  val settings = new doc.Settings(error => print(error))
  settings.usejavacp.value = true
  val docFactory = new doc.DocFactory(new reporters.ConsoleReporter(settings), settings)
  val universe = docFactory.makeUniverse(Left((sources in Compile).value.map(_.absolutePath).toList))
}

然后运行sbt scaladoc,看看(期间makeUniverse):

[info] Set current project to test (in build file:...)
scala.reflect.internal.MissingRequirementError: object scala.annotation.Annotation in compiler mirror not found.
  at scala.reflect.internal.MissingRequirementError$.signal(MissingRequirementError.scala:16)
  at scala.reflect.internal.MissingRequirementError$.notFound(MissingRequirementError.scala:17)
  at scala.reflect.internal.Mirrors$RootsBase.getModuleOrClass(Mirrors.scala:48)

这里有什么问题?我已经尝试过fork := truesbt/scala 版本的不同组合,但无济于事。

4

1 回答 1

1

It seems you need to provide scala-library (and indeed, any other dependencies) directly to the DocFactory.

scaladoc := {
  import scala.tools.nsc._
  val settings = new doc.Settings(error => print(error))
  val dependencyPaths = (update in Compile).value
    .select().map(_.absolutePath).mkString(java.io.File.pathSeparator)
  settings.classpath.append(dependencyPaths)
  settings.bootclasspath.append(dependencyPaths)
  val docFactory = new doc.DocFactory(new reporters.ConsoleReporter(settings), settings)
  val universe = docFactory.makeUniverse(Left((sources in Compile).value.map(_.absolutePath).toList))
}
于 2014-10-16T21:08:11.890 回答