在大型Java项目中与Java配对的最佳动态语言是什么?
我们正在考虑将动态语言用于测试,控制器和服务。一些选项是Groovy,JRuby或Jython。每个人的优点和缺点是什么?理想情况下,我们可以从动态语言调用Java,也可以从Java调用动态语言。
编辑:如果有帮助,我们将Hibernate与PicoContainer和Webwork一起使用。
谢谢, 亚历
答案 0 :(得分:9)
实际上有三种动态语言可以提供与Java无缝的互操作 - scala,groovy和clojure。从那里,我会问你的团队他们宁愿使用哪种语言,或者让他们尝试使用每种语言的原型并看看他们的想法。
如果团队效率在开始时并不重要,请查看每种语言试图解决的问题:
最后,我走上了寻找基于项目的完美语言的道路,并发现没有完美的语言。我上面提到的所有语言都编译为本机JVM字节代码并且非常可靠。有时你只需选择一种可能不像其他语言那样酷的语言,但会让你解决问题。
答案 1 :(得分:4)
我推荐Groovy,主要是因为它与Java无缝互操作,几乎是Java的超集,所以Java开发人员很容易学习。我绝对没有证据支持这一点,但基于传闻,猜测和个人经验,我怀疑Groovy社区比JRuby或Jython的社区大得多。
顺便说一句,在我看来,Groovy++太不成熟,无法考虑生产用途。
答案 2 :(得分:2)
当然,答案在某种程度上取决于品味和灵活性。如果有些人没有使用Ruby或Python的经验,那么Groovy将会有更接近Java的语法(实际上它是Java的超集),因此更易于销售。
我无法真正与JRuby交谈,因为我没有使用它。
Groovy为您提供了与您列出的三个Java最简单的互操作。它在EasyB中有一个非常好的BDD库,我非常喜欢它。从消极方面来看,我认为Groovy的功能或语法并不能很好地结合在一起。它可能有点像Java的一大堆独立扩展。
Jython当然是Python,所以语法不同,但也具有Python的所有一致性。 Interop非常擅长脚本级别,但如果你想在Jython中编写你用Java调用的预编译类,那么至少有点尴尬。 Groovy的另一个主要帮助就是你有一个真正的REPL来与Java项目进行交互。
我还要提到Clojure,语法更加不同,但Java互操作性非常好,可能是最好的,而且你还有一个REPL。如果民众难以适应Ruby或Python语法,那么Lisp可能就是正确的。
答案 3 :(得分:1)
Clojure可能是控制器和服务的最佳动态语言。 (取决于你对“服务”的意思。
Scala和Groovy ++拥有最好的java互操作,但那些不是动态的(在Groovy ++中,你自己决定键入什么。)。 Scala具有动态语言的外观和感觉。 Scala具有良好的测试框架http://www.scalatest.org/,而Specs和AKKA非常mature用于服务,并且还具有Java API
答案 4 :(得分:1)
我建议你去Jython。语法很简洁,您可以获得Python为您提供的任何其他功能/便利。
例如,如果你使用Groovy,你基本上只限于Java会给你的东西。 Jython也会将Python的强大功能添加到其中。
如果它有帮助,我已经将Jython与Hibernate,SOAP,Corba和EJB一起使用,并且比使用普通Java做同样容易。