Java 如何在单个Netbeans项目中混合使用基于JVM的语言?

Java 如何在单个Netbeans项目中混合使用基于JVM的语言?,java,netbeans,scala,clojure,Java,Netbeans,Scala,Clojure,例如,是否可以让Scala、Java和Clojure源代码在同一个项目中正确地一起编译/构建?或者,我是否必须将它们作为单独的项目库,然后由我选择的“主”项目使用 如果两者都不是,那么其他人是怎么做的?不幸的是,尽管Java社区似乎对多语言编程非常热衷,但IDE供应商并没有真正跟上。它们通常有java、斯卡拉、CrojueReo、Groovy、Ruby、ECMAScript、Python、C++项目的插件,但在一个项目中混合多语言通常不支持。 例如,在Ruby中,通过JRuby将Swing用作G

例如,是否可以让Scala、Java和Clojure源代码在同一个项目中正确地一起编译/构建?或者,我是否必须将它们作为单独的项目库,然后由我选择的“主”项目使用


如果两者都不是,那么其他人是怎么做的?

不幸的是,尽管Java社区似乎对多语言编程非常热衷,但IDE供应商并没有真正跟上。它们通常有java、斯卡拉、CrojueReo、Groovy、Ruby、ECMAScript、Python、C++项目的插件,但在一个项目中混合多语言通常不支持。 例如,在Ruby中,通过JRuby将Swing用作GUI是非常常见的。但是,如果您想使用Matisse,即NetBeans Swing GUI构建器,那么您必须使用Java项目,而不能在Ruby项目中使用Matisse。然而,如果您使用Java项目,那么您不能拥有Ruby主可执行文件,您必须拥有Java主可执行文件。此外,您没有得到Rake支持和Ruby项目类型支持的其他东西。(难看的解决方法是编写Java主可执行文件,手动创建
JRubyEngine
实例,将Ruby主可执行文件加载到其中并运行它。)

EclipseScala插件支持有限的一夫多妻制,但他们必须克服的困难是巨大的。基本上,他们使用运行时字节码补丁将Scala方面注入Java开发工具Eclipse插件中,以使类型驱动的跨语言重构工作起来。Groovy插件做了类似的事情,AspectJ也做了类似的事情(事实上,他们最初提出了使用方面编织将新功能注入JDT的想法)。因此,所有这些插件都允许自己和Java进行多语言编程。但不幸的是,他们彼此都不在一起。(尽管一些维护人员表示有兴趣进行更密切的合作。)


总的来说,我担心唯一的解决方案是新的IDE。

回答这个问题相当晚,但答案是IntelliJ IDEA在多语言编程方面做得非常好。我最近观看了一个演示,其中一名开发人员用5种(!)语言开发了一个混合语言应用程序

他们设法进行多语言感知的语法着色、重构等。他们显然为此付出了一些努力,并有理由为此感到自豪


我很高兴地注意到这个想法现在(部分)是开源的。

有人知道IntelliJ在这方面的立场吗?是的!请看我对这个问题的回答。其工作方式是IDEA不使用语言自己的工具进行语法和语义分析。相反,IDEA包含一个强大而复杂的编译器框架(现代IDE基本上是围绕一个几乎完整的编译器构建的,它只缺少代码生成阶段,其他一切,解析、类型检查、类型推理等都在那里),并且它们为IDE重新实现了每种语言。最酷的是,这个编译器框架非常通用,并且使用单个共享语义树作为其后端。所以,所有的代码都被编译到这个单一的共享语义树中,所有的操作,比如查找引用、重构、代码完成等等,都是针对这个单一的共享语义树执行的。例如,通过这种方式,可以跨多种语言执行重命名重构。