我想在项目中一起使用 Kotlin 和 Scala,也许还有其他一些语言,但我没有看到这样做的好方法。我想到的唯一方法是编译一种语言并将其反编译成 Java 以与另一种语言一起使用。有没有其他选择?
2 回答
您可以同时使用 Scala 和 Java,因为 scalac 可以理解和编译 Java 文件。其他语言可能也是如此。使用多种替代 JVM 语言时可能会出现问题,因为例如 Kotlin 编译器可能无法理解 Scala 文件,反之亦然。
我认为最好的方法是将项目分成不同的模块,每个模块最多使用一种替代语言。
模块是什么意思?
对于module,我的意思是一组源文件被翻译成一个(二进制)工件,即一个 jar 文件。在不同的情况下,我会简单地将“模块”称为项目。请注意,一个模块可能依赖于二进制级别的其他模块(例如,有一些 jar 文件作为依赖项)。
IDE 中的多模块支持
我认为大多数主要 IDE 应该可以同时处理不同的模块,即使每个模块使用不同的语言。术语因 IDE 而异。
术语
对于 Intellij IDEA,我的模块之一称为“模块”。对于 Eclipse,它将被称为“项目”。
为了完整起见,不把话放在别人的嘴里,我想权衡一下。
我同意ziggystar 回答的最后一句话。正确的做法是采用基于组件的方法,而不是尝试在一个组件或项目中组合多种语言。
从技术角度来看,每种 JVM 语言都有自己的编译器。有些,例如 Scala 的,可以编译 Scala 和 Java 文件。但是,对于其他编译器,这可能是正确的,也可能不是。为了避免奇怪的构建过程,一个好的方法是为每个构建的模块使用一种语言。
由于您坚持使用 JVM 语言,因此每种语言都可以编译为 JAR,因此您可以轻松地将可执行二进制文件作为单个 JAR 文件分发,所有组件都包含在其中。这是 Fat JAR 方法(请参阅Stack Overflow 上的这个问题,Java Code Geeks 上的这篇文章)。
从人类可读性的角度来看,这也应该使您的软件更易于理解。您不仅将其分解为逻辑构建块(每个组件),而且进行修改的人只需要了解他们正在处理的组件所使用的语言以及他们需要与之交互的组件的公共接口。语言之间没有心理上下文切换。