【问题标题】:SBT Scaladoc configuration for the standard library标准库的 SBT Scaladoc 配置
【发布时间】:2015-07-11 02:56:03
【问题描述】:

我想设置 ScalaDoc 以从 SBT 链接到标准库。我正在使用 0.12.4,但我很快就会切换到 0.13。此外,我想通过使用 0.13 的支持来简化设置。

最好的选择是使用0.13's autoAPIMappings 进行自动映射:

//Requires SBT 0.13. However, automatic mapping does not work for the standard library.
autoAPIMappings := true

scala-library 应该支持它,因为its pom 设置了info.apiURL 和that's what SBT reads。

但是,这不起作用。 String 和 GenTraversable 都没有超链接。 last 表示没有选项添加到 scaladoc 参数。

所以:

  1. 如何修复autoAPIMappings?
  2. 还有其他选择吗?
  3. 我没有观察到这个功能有效,但也许我只需要另一个设置info.apiUrl 的包。想到了什么包?谷歌似乎没有什么帮助,如何查询具有某些属性的 maven 包,甚至如何在 pom 上进行全文搜索也不明显。 find ~/.m2 ~/.ivy2 -name '*.pom' -type f|xargs grep info.apiUrl 在我的 2G 本地缓存中没有发现任何结果。

(这个问题可能看起来是 SBT Scaladoc Configuration 的重复,但它是针对更新的配置和不同的 SBT 版本,所以问题是不同的;此外,现有答案显示了一个已弃用的解决方案)。

【问题讨论】:

  • autoAPIMappings := true 使用 Scala 2.10.2 和 sbt 0.13.0 为我处理一个最小的测试用例。 Option、Int 和 GenTraversable 链接正常,last 显示正确的选项。 String 没有,因为它转到 java.lang.String,这是 javadoc,scaladoc 不支持。
  • @MarkHarrah:感谢您的回答!但是在这个最小的测试用例上它对我不起作用(Int 和 Option 都失败,没有通过任何选项):gist.github.com/Blaisorblade/6529621 我在那里做错了什么,还是应该打开一个问题?它对你有用吗?
  • 是的,它对我有用。您可能 a) 查看 .ivy2/cache 中的 pom 并验证它是否具有 info.apiURL b) 查看 show compile:doc:apiMappings,其中应该有 File->URL 的 Map 传入 doc c) 查看 show compile:doc::autoApiMappings验证已启用。 d) 查看about 以验证正在使用的 sbt 和 Scala 版本。 e) 检查~/.sbt/0.13/ 没有设置任何内容。
  • @MarkHarrah:我发现了问题:使用 0.12.4(或者我猜是 .x)下载 scala-library 会创建一个错误的 ivy 描述符。 (a) 是问题所在:SBT 0.12.4 没有在 ivy 文件中生成足够的元数据(不是 POM,我在 Ivy 缓存中没有找到任何元数据——而且 POM 没问题)。这反映在apiMappings 是空的,而其余的都很好。 Ivy 文件包含对 info.apiUrl 的提及,但仅在不同的标记中。所有数据都可在github.com/Blaisorblade/sbt-test-case-apiUrl 获得,重现说明在最后一次提交中。 0.13 上的 clean+update 无法修复。
  • 这令人失望,将成为一个常见问题。只有 0.13 知道info.apiURL 属性很重要,应该做成一个额外的属性。清洁~/.ivy2/cache/org.scala-lang/scala-library/ivy-2.10.2.xml。请打开一个错误。我不确定它是否可以解决,但我们会看到。

标签: scala sbt scaladoc


【解决方案1】:

我不知道autoAPIMappings 的解决方案,但这里有一些替代方案。

  1. 一种可能的替代方法是使用0.13's apiMappings,可以设置手动映射。在我的系统上,last doc 表明这会将-doc-external-doc:/Users/pgiarrusso/.sbt/boot/scala-2.10.2/lib/scala-library.jar#http://www.scala-lang.org/api/2.10.2/ 添加到命令行,并且可以正常工作。

    apiMappings += (scalaInstance.value.libraryJar -> url(s"http://www.scala-lang.org/api/${scalaVersion.value}/"))
    

这需要 Scaladoc 2.10.2 或更高版本。

  1. 或者,可以手动添加相同的选项。这在 SBT 0.12 上是必需的。重要的主要步骤是找到合适的库。

    在 0.13 语法中:

    scalacOptions in (Compile, doc) += s"-doc-external-doc:${scalaInstance.value.libraryJar}#http://www.scala-lang.org/api/${scalaVersion.value}/"
    

    在 0.12 语法中:

    scalacOptions in (Compile, doc) <+= (scalaVersion, scalaInstance) map { (scalaVer, scalaIn) =>
      "-doc-external-doc:" + scalaIn.libraryJar + "#http://www.scala-lang.org/api/" + scalaVer + "/"}
    

    此选项仍需要 Scaladoc 2.10.2。

  2. 最后,在较旧的 Scaladocs 上,可以使用 -external-urls,尽管它不太精确(因此已被弃用),如 @MarkHarrah had suggested earlier。

    在 0.13 语法中:

    scalacOptions in (Compile, doc) += s"-external-urls:scala=http://www.scala-lang.org/api/${scalaVersion.value}/"
    

    在 0.12 语法中:

    scalacOptions in (Compile, doc) <+= scalaVersion map (scalaVer => "-external-urls:scala=http://www.scala-lang.org/api/" + scalaVer + "/")
    

最后,请注意,在所有情况下,String 的出现都不会成为超链接,这可能是因为类型别名的某些错误。但是,其他类型(包括GenTraversable)是超链接的。

【讨论】:

  • 注意:问题的cmets讨论autoAPIMappings的问题,我应该在答案中加入一个摘要。
  • 更新:0.13.1的问题应该已经修复了,见github.com/sbt/sbt/issues/876。
【解决方案2】:

只需使用这个插件:

https://github.com/ThoughtWorksInc/sbt-api-mappings

并且外部引用将被解析。

【讨论】:

  • 这太好了!不过,对杜比不起作用。它生成一个链接,但链接无效。
  • 请为图书馆创建一个拉取请求
  • 问题是 doobie 还没有发布到 maven Central...。一旦完成,它应该可以工作。
猜你喜欢
  • 2012-11-28
  • 2013-11-29
  • 2014-07-09
  • 1970-01-01
  • 2012-09-15
  • 2018-05-14
  • 1970-01-01
  • 2015-05-23
  • 1970-01-01
相关资源
最近更新 更多