如何获取Groovy生成的java源代码
Groovy中有一些遗留代码,我们希望从应用程序中删除Groovy,因此,我们需要获得使用gmaven插件后生成的java源代码
基本上,换句话说,我正在动态生成新类(使用gmaven Groovy maven插件),我希望能够获得生成的类的java源代码
我做了一些研究,发现这个插件的唯一目标是
<goal>generateStubs</goal>
<goal>compile</goal>
<goal>generateTestStubs</goal>
<goal>testCompile</goal>
我看不出有任何目标可以让您获得完全实现的java源代码,存根代码对我们来说是不够的,因为我们需要最终实现的源代码来摆脱Groovy
# 1 楼答案
此问题不久前已出现在邮件列表中[0]。总而言之:Groovy到Java是很难实现的,因为存在Java中不可用的语言构造和API(如果您确实想完全删除Groovy依赖项的话)
特别是随着呼叫站点缓存和其他性能优化技术的引入,生成的Java代码看起来很像这样(为了简单起见,我刚刚在JD-GUI中加入了一些脚本[1]):
[0]http://groovy.329449.n5.nabble.com/Java-lt-gt-Groovy-converters-td337442.html
[1]http://java.decompiler.free.fr
# 2 楼答案
我不太熟悉gmaven插件,但我认为它可以将groovy代码编译成字节码。在本例中,您可以使用字节码反编译器,这里有一个很好的列表here。过去我用过JAD,它很不错。最好的也会尝试根据类名创建有意义的变量名
不过有一个警告——Groovy对象是从GObject派生的,而不是java。因此,您可能需要将groovy jar保留到groovy->;java移植已经完成。另外,请准备好,它将不是一个非常容易阅读的java
# 3 楼答案
生成的存根将对您毫无用处。它们正是它们的名字所暗示的:存根
存根仅在执行java/groovy联合编译时有用。这是因为java/groovy混合项目中涉及两个编译器
groovy代码将使用
groovyc
编译器编译,结果是字节码这是生成的存根的一个示例:
正如你所看到的,没有什么有用的东西。您仍然需要依赖一些groovy库
# 4 楼答案
它可能超出了您的范围(1岁),但我与同样的问题进行了斗争,并找到了一种从反编译的groovy类中检索算法(而不是java源代码)的方法
你可能想看看:http://michael.laffargue.fr/blog/2013/11/02/decompiling-groovy-made-classes/