14

我知道如果在定义一个依赖项时添加 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 生成想法项目后手动配置它。

4

3 回答 3

11

您必须更改引导属性。在最近从Mathias解码的博客中有一个很好的描述: “如何使 SBT 下载 scala 库源”(从@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.
  • sbt.boot.propertiessbt启动器 jar 的子目录中提取
  • 启动您最喜欢的编辑器并将第 3 行更改为分类器:(sources取消注释该行)
  • 找到您在 SBT 设置期间创建的 sbt 脚本文件(例如~/bin/sbt,或者,当使用 Homebrew 时,/usr/local/Cellar/sbt/0.7.x/bin/sbt
  • 将路径添加到调整后的sbt.boot.properties文件,前面带有“<code>@”字符和双引号,作为 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-...-sources.jar为你创建的任何新项目下载 Scala 编译器和标准库的文件。
要让 SBT 为现有项目执行此操作,您必须project/boot/scala-{version}在执行“<code>sbt update”之前手动删除目录(如果主 jar 已经存在,SBT 不会获取其他源工件)。

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

请参阅 SO 问题“我如何让 sbt 使用本地 maven 代理存储库 (Nexus)?

于 2010-12-18T10:55:48.290 回答
0

基于迈克尔斯林评论:

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

sbt update-sbt-classifiers
于 2014-06-24T18:31:20.070 回答
0

两条信息。

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

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

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

要实际获取 SBT 下载的源代码,请执行以下操作:

“更新分类器”

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

于 2015-07-25T12:09:14.923 回答