如何使IntelliJ IDEA使用javac for Java和scalac for Scala?

Prz*_*wka 10 java compiler-construction scala compilation intellij-idea

在我的IDEA项目中,Scala模块依赖于Java模块.当我尝试编译Scala模块时,只触发scalac.它编译Java和Scala源代码.

我希望scalac只编译Scala模块,因为javac对Java源代码来说要快得多(而且我的Java项目很重要). 如何让IDEA为不同的模块使用不同的编译器?


我的解决方法是(对于Java模块的每个依赖项):

  1. 删除项目配置中的模块依赖项
  2. 将依赖项添加到适当的编译输出目录"MyJavaModule/target/classes"

显然我对此并不满意,因为每次重新导入Maven项目时,我都需要重复所有这些以便快速编译.我希望有人知道更好的方法.


澄清:我想强调,像SBT或Maven这样的工具无法解决我的问题.它不仅仅是编译.它是关于IDEA中的编译,对于像Scala Worksheet或从IDEA运行单元测试所需.我的目标是使用SBT的编译速度获得全方位的IDEA细节(语法高亮,智能自动完成,自动导入等).现在我必须要么容忍很长的编译时间(由于我的Java模块的依赖性),要么在SBT中使用裸机REPL和测试.

Prz*_*wka 4

Randall Schulz在评论中提出了正确的问题:“为什么使用哪个工具进行编译很重要? ”到目前为止,我认为如果你想使用 IDEA 的优秀功能(例如 IDEA 的 Scala Console 或从其中运行测试)。我错了。

事实上,IDEA 会选择任何其他工具(例如伟大的 SBT)编译的类。在使用 IDEA 的任何有用功能之前,您只需确保所有类都是最新的。最好的方法是:

  1. 在后台启动连续增量编译(例如通过在 SBT 中发出“~compile”)
  2. 删除 IDEA 运行配置中的“make”步骤

就这样!然后,您可以使用 IDEA 的所有炫酷功能(不仅是语法突出显示和代码完成,还包括 Scala Console 中的所有自动导入,快速运行选定的单元测试),而无需在不同窗口之间切换。这就是我到现在为止错过的工作流程!感谢大家对这个问题的所有评论。