在同一项目中使用多种JVM语言

时间:2015-06-09 12:26:07

标签: java scala jvm kotlin polyglot

我想使用Kotlin& Scala在项目中,也许还有其他一些语言,但我没有看到这样做的好方法。我想到的唯一方法是编译一种语言并将其反编译成Java以与另一种语言协同工作。还有其他选择吗?

2 个答案:

答案 0 :(得分:3)

您可以同时使用Scala和Java,因为scalac可以理解并编译Java文件。对于其他语言也是如此。使用多种替代JVM语言时可能会出现问题,因为例如Kotlin编译器可能无法理解Scala文件,反之亦然。

我认为最好的方法是将项目拆分为不同的模块,每个模块最多使用一种替代语言。

模块是什么意思?

使用模块,我的意思是一组源文件被转换为一个(二进制)工件,即一个jar文件。在不同的情况下,我只需要打电话给"模块"一个专案。请注意,模块可能依赖于二进制级别上的其他模块(例如,将一些jar文件作为依赖项)。

IDE中的多模块支持

我认为大多数主要IDE应该可以同时处理不同的模块,即使每个模块使用不同的语言。不同IDE的术语各不相同。

术语

对于Intellij IDEA,我的一个模块名为" module"。对于Eclipse,它将被称为" project"。

答案 1 :(得分:3)

为了完整而不把话语放到别人的嘴里,我想要权衡。

我同意ziggystar's answer的最后一句话。正确的做法是采用component-based approach而不是尝试在一个组件或项目中组合多种语言。

从技术角度来看,每种JVM语言都有自己的编译器。某些(例如Scala)可以编译Scala和Java文件。但是,对于其他编译器,这可能适用也可能不适用。为了避免奇怪的构建过程,一个好的方法是为每个构建的模块使用单一语言。

由于您坚持使用JVM语言,因此可以将每种语言编译为JAR,因此您可以轻松地将可执行二进制文件作为单个JAR文件进行分发,并将所有组件都包含在其中。这是Fat JAR方法(参见this question on Stack Overflowthis post on Java Code Geeks)。

从人类可读性的角度来看,这也应该使您的软件更容易被理解。您不仅将其分解为逻辑构建块(每个组件),而且仅进行修改的人员需要了解他们正在处理的组件所使用的语言以及他们需要与之交互的组件的公共接口。语言之间没有心理上下文切换。