为啥 sbt 为 import scala.swing 给出“对象 swing 不是包 scala 的成员”?

Posted

技术标签:

【中文标题】为啥 sbt 为 import scala.swing 给出“对象 swing 不是包 scala 的成员”?【英文标题】:Why does sbt give "object swing is not a member of package scala" for import scala.swing?为什么 sbt 为 import scala.swing 给出“对象 swing 不是包 scala 的成员”? 【发布时间】:2015-09-15 00:52:30 【问题描述】:

Sbt 版本:0.13.8

Scala 版本:2.11.2

当用 scalac 编译我的 scala swing 应用程序时,它只是编译。 但是,当使用 SBT 编译相同的文件时,它会提供以下错误:

[error] my/file/path.scala:1: object swing is not a member of package scala
[error] import scala.swing._

我将 scala 版本添加到我的 build.sbt 中。我甚至配置了 scalaHome(我认为它不应该在 build.sbt 中)。

build.sbt 中的行:

scalaVersion := "2.11.2"
scalaHome := Some(file("/my/scala/location/opt/scala-2.11.2/"))

/my/scala/location/opt/scala-2.11.2/lib

目录包含 sacla swing 库:scala-swing_2.11-1.0.1.jar,这也是 scalac 简单编译的原因。

有些人可能会说我应该在 build.sbt 中将 swing 添加到我的 libraryDependencies 中,但它不应该,因为它是核心库的一部分并且已配置 scalaHome。

如何让 sbt 以自然的方式注意到 swing 核心库?

奖金问题: 如何在 build.sbt 之外配置 scalaHome(无需破解 sbt jar 本身)或更好,是否注意到 SCALA_HOME 环境变量?

【问题讨论】:

【参考方案1】:

从 2.11 开始,scala swing 包不再列在scala's standard library api 中,实际上在它自己的README 中被描述为“大部分不受支持”。

我认为您应该期望必须将其作为依赖项包含在内。

另见What's wrong with my scala.swing?

【讨论】:

search.maven.org/… 它提到“标准库的附加部分作为单独的库提供。”然后提到 scala.swing。正如我提到的,它也包含在我的 scala 安装中,并且 scalac 没有问题。只有 sbt。为什么 sbt 不考虑我的 SCALA_HOME? 只是为了澄清。我明白你来自哪里。然而,一切都说了又做了:scala 2.11.2 带有 scala.swing 库(支持与否)。即使它在那里,sbt 也不会捡起它。 不知道还能说什么。它带有 scala.swing,作为标准库module。模块化的目的是让核心标准库变得更苗条。我认为 sbt 已经决定,非核心模块是必须声明的依赖项。 scalac 可能会将所有内容放在其 CLASSPATH 中的一个过度填充的 lib 目录中,但很明显 scala 团队的意思是非核心模块在未使用时可以从 Scala 平台中省略。 总之,我认为这不是一个错误,而是一个选择。你可能不同意它。 (我认为这很合理。)但我怀疑它会改变,因为它与缩小必须存在的核心 Scala 平台的愿望是一致的。它唯一的代价是你必须在 sbt 中声明一个依赖(或将其指向为非托管依赖)。

以上是关于为啥 sbt 为 import scala.swing 给出“对象 swing 不是包 scala 的成员”?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 SBT 解析 SNAPSHOT 版本?

为啥 sbt 因 sbt.ResolveException 失败:Spark 2.0.0 和 Scala 2.9.1 的未解决依赖关系?

为啥 SBT 的 Scala (2.10) 不包含 Akka?

为啥 sbt-native-packager 不生成 bin 目录?

为啥在 Play 2.3 项目中 sbt 编译后 sbt 失败并显示 NoClassDefFoundError: play/Play$ in Play 2.2.x 项目?

为啥我的 sbt 项目依赖项不起作用? (坚持尝试远程获取它)