我继承了大量的Groovy代码,但由于以下几个原因,我发现很难维护:
虽然我很欣赏这种语言的紧凑性,但维护工作既困难又繁琐。
我试图手动将一些部分转换为Java,这很痛苦。您是否了解有助于此转换的任何工具或插件?
答案 0 :(得分:24)
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;
}
答案 1 :(得分:15)
可能不是你想听到的答案,但我会专注于使用Groovy变得更加舒服,而不是试图将代码转换为Java。你可以在Groovy中做很多事情,这些事情根本不能很好地转换为Java(如closures)。任何自动转换为Java都会使代码的可读性降低,难以理解。
如果你不能被说服坚持使用Groovy,并且你必须迁移到Java,你最好的选择是手工完成。
答案 2 :(得分:4)
Groovy和Java语言都编译为相同的字节码(Java Platform Bytecode)。所以只需(a)将.groovy文件编译为.class文件; (b)使用JDGUI等反编译器将.class文件反编译为.java文件。
答案 3 :(得分:3)
我的最佳提示是编写大量单元测试。
这种建议适用于大多数动态语言,因为编译器对静态类型检查的“安全网”较少。您需要添加测试以检查输入和输出值是否具有正确的类型等。
我认为这将解决您的大多数问题。
答案 4 :(得分:3)
我使用Groovy ++找到并替代解决方案。它几乎具有Groovy的所有优点,但具有Java的性能和强大的类型。此外,它基于Groovy,因此显然您只需添加一个jar文件,并在代码顶部添加“@Typed”注释。
此外,它增加了一些新功能,例如“GrUnit”,并允许混合动态和静态类型,我希望这将允许创建DSL。因此它允许与现有的Groovy代码混合,并与Grails一起使用。
该项目似乎很年轻,但真正有前途。我已经在测试水域,并检查我能走多远。
所以,这个答案实际上没有说明如何将Groovy转换为Java,但你可以得到更好的东西:两个世界加上可选的第三世界的好处 - 没有双关语意图:-) - 静态类型和性能
答案 5 :(得分:0)
一年前有一些问题。经过一两个月的狂热兴奋之后,现实世界变弱了。即使是GReclipse 2.0也不会减少痛苦,代码变得无法管理和痛苦。 简短回答你的问题 - 没有。没有一个真正好的工具来做到这一点。 GSql我用Spring JdbcTemplate替换,带有回调的闭包。所有这一切都需要手动决定替换策略,所以如果你想获得一个好的代码,你需要做到直截了当。否则你可能会使用一些java反编译器,但我认为这不是你真正想要的。
答案 6 :(得分:0)
我们会将大约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
使用单元测试来控制重构。
PS:我们用了。使用Groovy插件的Eclipse。问候Roebi
答案 7 :(得分:0)
对于有类似问题的人,您可以查看GMavenPlus