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