【发布时间】:2013-10-06 10:13:56
【问题描述】:
在我的 IDEA 项目中,Scala 模块依赖于 Java 模块。当我尝试编译 Scala 模块时,只会触发 scalac。它编译 Java 和 Scala 源代码。
我希望 scalac 只编译 Scala 模块,因为 javac 对于 Java 源代码要快得多(而且我的 Java 项目很大)。 如何让IDEA对不同的模块使用不同的编译器?
我的解决方法是(对于 Java 模块的每个依赖项):
- 在项目配置中删除模块依赖
- 将依赖添加到适当的编译输出目录“MyJavaModule/target/classes”
显然我对此并不满意,因为每次我重新导入 Maven 项目时,我都需要重复所有这些以进行快速编译。我希望有人知道更好的方法。
澄清:我想强调,像 SBT 或 Maven 这样的工具并不能解决我的问题。这不仅仅是编译。它是关于 IDEA 中的编译,是 Scala Worksheet 或从 IDEA 运行单元测试所必需的。我的目标是在 SBT 的编译速度下拥有全方位的 IDEA 细节(语法高亮、智能自动完成、自动导入等)。现在我不得不忍受较长的编译时间(由于对我的 Java 模块的依赖),或者在 SBT 中使用准系统 REPL 和测试。
【问题讨论】:
-
为什么编译工具很重要?
-
因为如果我想在其中运行测试或 Scala Worksheet,IDEA 需要自己进行编译。我想要它,因为它比 SBT 控制台更有效。此外,工具很重要,因为编译速度取决于它。
-
语法高亮、自动完成、自动导入不依赖于IDEA进行编译。这些东西是从源代码的内部派生索引中删除的。除了工作表功能之外,您还可以使用 SBT 定义您的项目并使用 sbt-idea 插件生成 IDEA 项目定义文件。单元测试在 SBT 中同样快(可能更快),只需执行
~test即可完全自动化(由 IDEA 中的 Save 命令触发)。 -
我同意,如果不介意在窗口之间切换,SBT 非常适合单元测试(您不是每次都必须运行整个测试套件吗?)。虽然 SBT REPL 显然比 IDEA Scala Console 差。如果我想使用 IDEA Scala 控制台,仍然需要通过 IDEA 进行编译,除非可以以某种方式将其关闭。我还没有找到这样的选择......哦,等等......我刚刚找到它......哇!只需在运行配置中删除“make”步骤。当然现在这意味着我需要完全从 Maven 切换到 SBT :) 但我认为我会那样做 :)
-
上一条评论的溢出:如果有一个单独的窗口对你来说有点麻烦,你可以使用 IDEA 的 SBT 插件,它将 SBT 的操作集成在一个 IDEA 窗口中。这(对我来说)有一个很大的优势:来自编译器(和测试?)的错误超链接到源代码。
标签: java scala compiler-construction compilation intellij-idea