sbt - 我可以将 sbt 的 `apiMappings` 设置用于托管依赖项吗?

标签 sbt scaladoc

我希望我用 sbt 生成的 ScalaDoc 链接到外部库,在 sbt 0.13 中我们有 autoAPIMappings应该为声明其 apiURL 的库添加这些链接.但在实践中,我使用的库都没有在其 pom/ivy 元数据中提供这一点,我怀疑其中一些库永远不会这样做。
apiMappings设置应该有助于解决这个问题,但它被输入为 Map[File, URL]因此适用于为非托管依赖项设置文档 url。托管依赖项声明为 sbt.ModuleID 的实例并且不能直接插入到该 map 中。

我可以以某种方式填充 apiMappings使用将 URL 与托管依赖项相关联的内容进行设置?

一个相关的问题是:sbt 是否提供了一种获得 File 的惯用方法?来自 ModuleID ?我想我可以尝试评估一些类路径并返回 File s 尝试将它们映射到 ModuleID s 但我希望有更简单的东西。

注意:这与https://stackoverflow.com/questions/18747265/sbt-scaladoc-configuration-for-the-standard-library/18747266有关,但该问题的不同之处在于链接到标准库的 scaladoc,对此有一个众所周知的 File scalaInstance.value.libraryJar ,在本例中并非如此。

最佳答案

通过执行以下操作,我设法使其用于引用 scalaz 和 play:

apiMappings ++= {
  val cp: Seq[Attributed[File]] = (fullClasspath in Compile).value
  def findManagedDependency(organization: String, name: String): File = {
    ( for {
        entry <- cp
        module <- entry.get(moduleID.key)
        if module.organization == organization
        if module.name.startsWith(name)
        jarFile = entry.data
      } yield jarFile
    ).head
  }
  Map(
      findManagedDependency("org.scalaz",        "scalaz-core") -> url("https://scalazproject.ci.cloudbees.com/job/nightly_2.10/ws/target/scala-2.10/unidoc/")
    , findManagedDependency("com.typesafe.play", "play-json")   -> url("http://www.playframework.com/documentation/2.2.1/api/scala/")
  )
}

当然是YMMV。

关于sbt - 我可以将 sbt 的 `apiMappings` 设置用于托管依赖项吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19786841/

相关文章:

scala - 在 Intellij 中编辑 Build.scala

scala - 如何记录模式定义中的值

Maven 的 Scaladoc 选项

scala - 无法在 ScalaDoc (Scala 3) 中添加包描述

scala - 使多项目 sbt 项目中的测试仅在依赖项目中的测试通过时才运行

sbt - 有没有办法在 sbt 中以编程方式调用 "reload"?

merge - 无法在多 jvm 节点测试中覆盖程序集合并策略

scala - 在 sbt 中,如何添加本地文件系统中的插件?

scala - 在 Scala 文档中搜索#::

scala - 寻找 Scaladoc 帮助,reduceLeft