有没有办法自动将Groovy转换为Java?

我inheritance了大量的Groovy代码,我发现很难维护它有几个原因:

  1. 通常很难说变量的类型是什么。
  2. 推论:很容易修改具有不同类型的变量,而不是意识到它。
  3. 在运行期之前会发现许多错误(如果您的unit testing几乎不包括所有内容,那就太可怕了)。
  4. 基本上忽略了参数的类型。
  5. 我正在使用的IDE(STS Pro)很有用,但远远落后于Java。 例如,重构是不可用的。
  6. 有时可以提供建议,有些则不是。

虽然我很欣赏这种语言的紧凑性,但维护工作既困难又繁琐。

我试图手动将一些部分转换为Java,这很痛苦。 您是否了解有助于此转换的任何工具或插件?

IntelliJ IDEA对重构groovy代码提供了相当不错的支持。 它还有一个来自Groovy的源代码级转换器 – > Java。 大多数情况下它会生成无法编译的代码,但它可能有助于您开始转换代码的过程。 Groovy代码:

class HelloWorld { def name def greet() { "Hello ${name}" } int add(int a, int b) { return a+b; } } 

转换的Java代码:

 public class HelloWorld { public GString greet() { return "Hello " + String.valueOf(name); } public int add(int a, int b) { return a + b; } public Object getName() { return name; } public void setName(Object name) { this.name = name; } private Object name; } 

可能不是你想听到的答案,但我会专注于使用Groovy变得更加舒服,而不是试图将代码转换为Java。 你可以在Groovy中做很多事情,这些事情根本不能很好地转换为Java(比如闭包 )。 任何自动转换为Java都会使代码的可读性降低,难以理解。

如果你不能被说服坚持使用Groovy,并且你必须迁移到Java,你最好的选择是手工完成。

Groovy和Java语言都编译为相同的字节码(Java Platform Bytecode)。 所以只需(a)将.groovy文件编译为.class文件; (b)使用JDGUI等反编译器将.class文件反编译为.java文件。

我的顶尖提示是写了很多unit testing

这种建议适用于大多数动态语言,因为编译器对静态类型检查的“安全网”较少。 您需要添加测试以检查输入和输出值是否具有正确的类型等。

我认为这将解决你的大多数问题。

我使用Groovy ++找到并替代解决方案。 它几乎具有Groovy的所有优点,但具有Java的性能和强大的类型。 此外,它基于Groovy,因此显然您只需添加一个jar文件,并在代码顶部添加“@Typed”注释。

此外,它增加了一些新function,例如“GrUnit”,并允许混合动态和静态类型,我希望这将允许创建DSL。 因此它允许与现有的Groovy代码混合,并与Grails一起使用。

该项目似乎很年轻,但真正有前途。 我已经在测试水域,并检查我能走多远。

所以,这个答案实际上并没有说明如何将Groovy转换为Java,但你可以获得更好的东西:两个世界加上可选的第三世界的好处 – 没有双关语: – ) – 静态类型和性能。

一年前有一些问题。 经过一两个月的狂热兴奋之后,现实世界变弱了。 即使是GReclipse 2.0也不会减少痛苦,代码变得无法管理和痛苦。 简短回答你的问题 – 没有。 没有一个真正好的工具来做到这一点。 GSql我用Spring JdbcTemplate替换,带有回调的闭包。 所有这一切都需要手动决定替换策略,所以如果你想获得一个好的代码,你需要做到直截了当。 否则你可能会使用一些java反编译器,但我认为这不是你真正想要的。

我们将大约1000个Groovy类更改为Java 8。

  • 自动:我认为它可以结合手动步骤

可能的迁移步骤

  • def变量:在IDE中使用正确的类名手动替换

  • def Methodes:在IDE中使用正确的类名手动替换为返回值

  • 文件重命名:自动将所有.groovy文件替换为.java文件(Java 8)

  • clousures:使用Java 8 Lambdas和Java 8 Streams手动替换

  • Groovy overritten Methodes:用新的Java jdk Klasses手动替换,即New File io,New Date API或包含Apache Libraries

使用unit testing来控制重构。

PS:我们用了。 Eclipse与Groovy插件。

问候Roebi

对于有类似问题的人,你可以看看GMavenPlus