排查常见的 Scala 问题
请查阅以下关于常见 Scala 和 sbt 问题的答案,这些答案可以帮助您解决在处理项目时可能遇到的编译器、性能或代码高亮问题。
为什么我的代码高亮显示不正确?
Scala 插件使用自己的类型检查器,并在您编写代码时实时执行类型推断。 类型检查针对编辑而非编译代码进行了优化。 其逻辑独立于 Scala 编译器,因此可以处理不完整的代码,不需要事先编译。 然而,这也意味着有时候 Scala 插件类型检查的结果与 Scala 编译器不一致——这是一个错误。
通常,这发生在代码复杂且您刚刚进行了重要修改时。 类型检查器可能需要时间来跟上,偶尔可能会失败。
尝试更新 IntelliJ IDEA 和 Scala 插件。 您可能遇到了已报告并修复的问题。
您还可以浏览我们在 我们的 YouTrack上开放和已解决票据的列表。 如果您找到描述与您的问题相似的票证,并且该问题已修复,但尚未在公共更新渠道发布,您可以考虑 切换到夜间更新渠道。
如果上述方法不起作用,首先,请为我们创建一个工单。
如果 type-aware highlighting 高亮显示了正确的代码,而且这是一个很少发生的错误,请尝试在本地禁用此高亮。
将代码高亮显示并从主菜单中选择 。
请从列表中选择 / * _ * /.../ * _ * / 选项。

错误不再被高亮显示。

如果大量代码被错误地高亮显示,请考虑启用 基于编译器的高亮显示。 请前往 并在 编辑器 选项卡上,将错误高亮更改为 编译器。

为什么我在使用 Make Project 命令时会遇到断言错误?
将 Scala 版本更改为 2.12 及更高版本。 我们还建议您对值类中的私有方法使用唯一名称。
为什么我无法编译我的 Scala 项目?
在大多数情况下,您的项目 JDK 与 Scala 或 sbt 版本不兼容。 尝试更改 Scala Compile 服务器 SDK。
按 Ctrl+Alt+S 打开设置,然后选择 。
在 JVM SDK 字段中指定合适的 SDK。

我们建议您使用 Java 8 SDK,因为 Scala 版本 2.12 和 sbt 版本 1.10 及更高版本与旧的 Java SDK 版本不兼容。
如何在编译我的 Scala 项目时解决 OutOfMemory 异常?
为了解决 Scala 编译器 Out Of Memory 的问题,请在 JVM 最大堆内存大小 字段中增加堆大小,该字段位于 Scala 编译器服务器 的设置中 。

如何将基于 IntelliJ IDEA 的 Scala 项目迁移到 sbt 项目?
您需要将 build.sbt 文件添加到您的项目中,在 build.sbt 中描述您的整个项目,然后重新导入该项目。
我们建议您从一开始就选择基于 sbt 的项目。 请参阅 Scala 入门。

IntelliJ IDEA 支持 sbt 集成测试模型吗?
当您构建 sbt 项目时,请记住 IntelliJ IDEA 项目模型并不完全具有与 sbt 相同的配置概念,因此仅 compile 和 test 得到了完全支持。 对于其他情况,我们建议您在 integrated sbt shell中运行构建。
如何解决我的 sbt 项目中的 OutOfMemory 异常?
当您的 sbt 进程内存不足时,请在 SBT 设置中增加最大堆大小(点击 ,该选项位于 sbt 项目 工具窗口中)。

如何阻止 Scala 插件将我的 imports 标记为未使用并删除它们?
确定一个导入是否被使用是复杂且昂贵的,有时——例如,在某些从另一个包导入的隐式转换的情况下——Scala 插件可能会错误地标记您的导入为未使用。 然后,当您调用 优化 import 操作时,该导入将被删除。
来看这个示例


请注意, import Mappers._ 在 HelloWorld 中标记为未使用。 您可以通过打开快速修复弹出菜单并选择 将导入标记为在此项目中始终使用 来让 IntelliJ IDEA 和 Scala 插件知道这个导入实际上是被使用的。

导入将被添加到始终被认为使用的导入列表中。 您可以在 中修改列表。
您的导入可能会被标记为未使用并立即删除,从而阻止您使用快速修复。 这意味着您已启用 实时优化导入 模式。 前往 并将其关闭。

如何在创建项目后更改 Scala 版本?
在大多数情况下,您项目的 Scala 版本将会在项目的构建脚本(例如,sbt)中指定,当您导入项目时,IntelliJ IDEA 将会识别到。 但可能会发生这种情况:您在 IntelliJ IDEA 中从头开始创建一个 Scala 项目,或者在项目创建后需要在构建脚本中更新 Scala 版本,而 IntelliJ IDEA 未注册更改。
请转到 并从左侧列表中选择 全局库。 在那里您可以下载并添加新的 Scala SDK,设置 Scala 版本,并从您的项目中删除旧的 SDK。

IntelliJ Scala Discord 服务器
如果您无法在此页面或其他帮助页面上找到问题的答案,您可以考虑加入 IntelliJ Scala Discord 服务器并向开发人员提问。 请记住,首先浏览可能的解决方案,尝试它们,如果仍然找不到答案,请在您的问题中包含您尝试过的内容以及结果。