【问题标题】:How can I let sbt download the source of scala-library.jar?如何让 sbt 下载 scala-library.jar 的源代码?
【发布时间】:2011-05-27 12:34:43
【问题描述】:

我知道如果我在定义一个依赖项时添加 withSources,sbt 可以自动下载该源 jar 文件。 例如,

val specs = "org.scala-tools.testing" % "specs_2.8.1" % "1.6.6" % "test" withSources ()

但是对于 scala-library.jar 和 scala-compiler.jar,我不需要明确定义它们,我怎样才能让 sbt 为我下载它们的源代码?所以,我不需要在使用 sbt-idea-plugin 生成想法项目后手动配置它。

【问题讨论】:

    标签: scala sbt


    【解决方案1】:

    您必须更改启动属性。最近的博客 decodified 中有一个很好的描述,来自Mathias:
    “How to make SBT download scala library sources”(从@hseeberger关键起点开始)


    这是相关部分(以防链接失效)

    首先,忘记尝试在您的 SBT 项目定义中找到一些“隐藏”设置来启用 Scala 库源下载!它不存在(至少在 SBT 版本 0.7.x 中不存在)。
    相反,为了使 SBT 屈服,您需要做以下两件事:

    1. 为您的 SBT 启动器创建一个备用配置文件。
    2. 让 SBT 启动器使用它。

    这些是详细的步骤:

    • 找到您的sbt-launcher-0.7.x.jar 文件。
      因为我在 OS/X 上并通过 Homebrew 使用 SBT,所以我住在/usr/local/Cellar/sbt/0.7.5.RC0/libexec/sbt-launch-0.7.5.RC0.jar。
    • 从启动器jar的sbt子目录中提取sbt.boot.properties
    • 启动您最喜欢的编辑器并将第 3 行更改为分类器:sources(取消注释该行)
    • 找到您在 SBT 设置期间创建的 sbt 脚本文件(例如 ~/bin/sbt,或者,使用 Homebrew 时,/usr/local/Cellar/sbt/0.7.x/bin/sbt)
    • 将路径添加到调整后的 sbt.boot.properties 文件,前面带有“@”字符和双引号,作为 java 调用的倒数第二个参数。

    这是我的 sbt 脚本文件的样子:

    #!/bin/sh
    java -Xmx768M -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=256m \
         -jar /usr/local/Cellar/sbt/0.7.5.RC0/libexec/sbt-launch-0.7.5.RC0.jar \
         "@/usr/local/Cellar/sbt/0.7.5.RC0/libexec/sbt.boot.properties" \
         "$@"
    

    完成这些步骤后,SBT 应该很乐意为您创建的任何新项目下载 Scala 编译器和标准库的 scala-...-sources.jar 文件。
    让 SBT 为现有项目执行此操作,您必须在执行“sbt update”之前手动删除 project/boot/scala-{version} 目录(如果主 jar 已经存在,SBT 不会获取其他源工件)。

    一旦您有了自定义的sbt.boot.properties 文件,还有其他方法可以将其提供给 SBT 启动器。

    见 SO 问题“how do I get sbt to use a local maven proxy repository (Nexus)?”

    【讨论】:

    • +1 链接,但我想确保这最终会出现在 Stackoverflow Crative Common Data (monthly) Dump 中(请参阅blog.stackoverflow.com/2009/06/…)。因此,我的编辑,你应该接受吗?
    【解决方案2】:

    基于 Michael Slinn cmets:

    如果您使用的是 sbt 0.11.x 及更高版本,请使用以下命令:

    sbt update-sbt-classifiers
    

    【讨论】:

    • 这获取了 sbt 项目定义本身的 deps,它可能使用了不同版本的 scala。
    【解决方案3】:

    两条信息。

    (1) SBT 文档 http://www.scala-sbt.org/0.13.5/docs/Detailed-Topics/Library-Management.html

    我引用: “要传递地获取所有依赖项的特定分类器,请运行 updateClassifiers 任务。默认情况下,这会使用源或 javadoc 分类器解析所有工件。”

    这意味着你不需要做任何事情,但你可以让它显式并放入你的 build.sbt: 传递分类器 := Seq("sources", "javadoc")

    要真正获得 SBT 下载的源代码,您可以这样做:

    “更新分类器”

    (2) 如果您正在使用 Eclipse scala IDE - 很可能您是因为 Eclipse/Netebeans 的插件开发对于 Eclipse 来说更加活跃 - 那么您应该配置您的 ecplise 以找出源代码下列的。 EclipseKeys.withSource := true 这是您应该阅读的文档, https://github.com/typesafehub/sbteclipse/wiki/Using-sbteclipse

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-01
      • 1970-01-01
      • 2011-07-07
      • 2023-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-08
      相关资源
      最近更新 更多