scala-sbt编译由于速度慢和各种问题而令人恐惧



我使用sbt在scala中进行编码时遇到了非常糟糕的时间。我知道与java相比,scala中的编译天生就很慢。

我已经尝试过eclipse和intellij,在scala+sbt中进行开发,两个都知道IDE在这项工作中很糟糕。请引导我面对以下恐怖:

  1. 如何在scala中将编译时间减少到毫秒(就像在java中一样),即使对于大型项目也是如此。。。。在IDE(eclipse/intellij)中。。。。考虑到我正在使用sbt

  2. 如何确保IDE中的构建以增量方式工作,并且只在更改的文件上工作。我观察到,在IDE中,每次更改/保存文件时都会进行完整的构建。。。。。再次记住,我正在使用sbt

  3. 请对命令行提出同样的建议,在每次代码更改后,当我做sbt包时,sbt似乎重新编译了整个项目,而不是更改的文件。

  4. 在intellij中,当我尝试运行单元测试用例时,整个基于sbt的项目会再次编译

  5. 此外,如果我在intellij中导入一个项目并同时使用sbt命令行,intellij构建和命令行构建之间的配合不好,我开始观察到intellij和weired编译错误中的完整编译

这只是部分答案,因为这在很大程度上取决于您正在做什么以及代码的外观,但我倾向于不使用IDE进行编译/测试。相反,我在sbt中运行这个(有时使用其他命令,取决于我正在做的事情)

> ~test-quick

哪个(引用文件):

  • 上次运行中失败的测试
  • 以前未运行的测试
  • 具有一个或多个可传递依赖项的测试,可能在不同的项目中,会重新编译

波浪号使其在每次发生代码更改时运行

无论如何,对我来说,它非常快,重要的是只运行可能改变的内容

我听到的另一件事(但不能保证会加快速度)是尽可能多地显式键入。类型推断器应该相当慢(当你思考它必须做什么时,这是有道理的)

根据Saby的请求进行编辑

在我讨论你提出的观点之前,我只想指出,这些并不是真正的恐怖,eclipse/intellij实际上并不擅长它们的工作。事实上,当你仔细想想,它们的工作效果令人印象深刻。

Scala是一种比java复杂得多的语言,这意味着编译器必须比java做更多的工作。我在这里谈论的是诸如宏、隐词和类型推理之类的特性。这些功能不是免费的,编译时间和内存在这里会受到影响。(基本上是因为编译器必须为类型推断做各种疯狂的事情;为宏多次运行代码;等等等等)

显然,与任何其他语言一样,编译时间由很多因素决定:您使用什么功能,使用什么模式,必须使用什么依赖项,仅举几个例子。

无论如何,逐点:

  1. 老实说,我不知道该怎么回答这个问题。我目前正在做一个小型的java项目(想想十几个依赖项,几千行代码,一些spring,但没有太多其他内容),我在Intellij中肯定没有得到毫秒级的编译时间。如果这真的造成了问题,那么我唯一的建议就是使用命令行。

  2. 我真的对eclipse一无所知,但如果你使用Intellij13,你可以这样设置增量编译器。Intellij 14中的sbt插件发生了很大的变化,所以我认为这不再是一个选项(即它做任何事情)

  3. 我想我上面的回答涵盖了这一点。重点是你不必使用sbt包,我通常也不需要。相反,键入sbt,当它加载类型~快速测试时,只在需要时运行sbt包

  4. 这可能就是intellij的工作原理。就像3,我认为你不能再改变这个了

  5. 我不知道这些是什么,但你可能应该用谷歌搜索错误,如果你找不到任何东西,就用一些例子创建一个新的堆栈溢出问题。

其他需要考虑的事项

设置可能很重要。我认识的大多数Scala核心开发人员都是用高级文本或emacs编写代码,在命令行上使用一个名为ensime和sbt的插件来测试/编译它(以及一两个repl)。否则(在写这篇文章的时候),大多数其他人(包括我)都会使用Intellij来编写代码,然后在命令行上使用sbt或Intellij本身来测试/编译。你需要四处玩耍,找到最适合你的。

你想考虑的另一件事是你所使用的sbt的版本。我没有这方面的基准,但我记得旧版本的速度较慢,仅仅因为你运行的是旧版本的东西就改变你的工作方式会很痛苦。

还要确保你安装了java 8 sdk——我知道Typesafe的同事们正在花越来越多的时间为java 8优化sbt。

第2点和第4点只适用于我(而且已经使用了很长一段时间),不需要特殊设置。

  1. 此外,如果我在intellij中导入一个项目,并同时使用sbt命令行,intellij构建和命令行构建之间的配合不好,我开始观察到intellij和weired编译错误中的完整编译

这应该在新的Scala插件版本中得到修复。

相关内容

  • 没有找到相关文章

最新更新