Groovy脚本编译为一个类

时间:2019-02-19 14:59:44

标签: java jenkins groovy closures

从此answer中,我了解到,每个Groovy脚本都编译为扩展groovy.lang.Script类的类

下面是在Jenkins编辑器中为Jenkins管道编写的测试groovy脚本。

node('worker_node'){
    print "***1. DRY principle***"

    def list1 = [1,2,3,4]
    def list2 = [10,20,30,40]

    def factor = 2

    def applyFactor =  {e -> e * factor}

    print(list1.each(applyFactor))
    print(list2.each(applyFactor))



    print "***2. Higher order function***"

    def foo = { value, f ->  f(value *2) }

    foo(3, {print "Value is $it"})

    foo(3){
        print "Value is $it"
    }
}

如何编译该groovy脚本以查看生成的类(源代码)?

2 个答案:

答案 0 :(得分:1)

生成的类是 bytecode ,而不是源代码。源代码是Groovy脚本。

如果要查看与等效Java源代码相似的内容,请像往常一样使用groovyc编译脚本,然后使用Java反编译器生成Java源代码(this question's answers列出一些)。

这当然要遵守反编译代码的一般警告。高级信息在编译过程中会丢失。反编译器必须猜测一下,才能找到表示原始源中可能存在的最佳方法。例如,原始代码中的for循环可能最终会反编译为while循环。

答案 1 :(得分:1)

詹金斯管道中的

groovy是领域特定语言。 这不是一个普通的习惯。

但是,如果您删除node(){ },则您的情况似乎很古怪。

,您可以在groovyconsole中运行它,或使用groovyc编译为类

只需下载稳定的groovy二进制文件并将其解压缩即可。

如果您的计算机上装有Java7或Java8,则可以运行groovyconsole并在那里尝试代码。

使用Ctrl+T,您可以看到为脚本生成的实际类代码。