11

在我的 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 和测试。

4

3 回答 3

4

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

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

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

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

于 2013-10-02T14:53:01.167 回答
0

您应该考虑使用像 Apache Ivy 或 Apache Maven 这样的依赖管理套件。然后将您的 Java 源代码放在一个单独的工件中,并让您的 Scala 项目依赖于 Java 项目工件。

如果你走 Maven 路线,有一个Scala 插件

于 2013-09-30T14:08:51.167 回答
0

获得已编译的 Scala 和 Java 文件的最简单方法可能是 SBT - 简单构建工具。只需创建一个项目(+ 添加依赖项等)并编译它。Scala + Java 编译开箱即用。我已经从 Maven 切换到 SBT。

如果您有一个复杂的 POM,或者您有其他不迁移到 SBT 的原因,您可以尝试配置 POM。只需添加(并可能配置)Scala 插件就足够了。我希望它不会破坏对 Java 的支持。

于 2013-09-30T20:35:51.037 回答