Groovy скрипт компилируется в класс - PullRequest
0 голосов
/ 19 февраля 2019

Из этого ответа я узнал, что каждый скрипт Groovy компилируется в класс, который расширяет groovy.lang.Script class

Ниже приведен тестовый скрипт Groovy, написанный для конвейера Jenkins в редакторе Jenkins.

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"
    }
}

Как скомпилировать этот отличный сценарий, чтобы увидеть сгенерированный класс (исходный код)?

Ответы [ 2 ]

0 голосов
/ 19 февраля 2019

groovy в jenkins pipe - это язык, специфичный для предметной области.Это не простой заводной.

Однако, если вы удалите node(){ }, то в вашем случае это выглядит как-то круто.

, и вы можете запустить его в groovyconsole или скомпилировать в класс с помощью groovyc

просто скачайте стабильный groovy двоичный файл и распакуйте его.

если у вас есть java7 или java8 на вашем компьютере - вы можете запустить groovyconsole и попробовать свой код там.

с помощью Ctrl+T вы можете увидеть фактический код класса, сгенерированный для вашего скрипта.

0 голосов
/ 19 февраля 2019

Сгенерированный класс байт-код , а не исходный код.Исходным кодом является скрипт Groovy.

Если вы хотите увидеть что-то похожее на то, как будет выглядеть эквивалентный исходный код Java, используйте groovyc, чтобы скомпилировать скрипт как обычно, изатем используйте Java-декомпилятор для создания исходного кода Java ( ответов на этот вопрос перечисляет несколько).

Конечно, это зависит от обычных предостережений по декомпилированному коду.Информация высокого уровня теряется в процессе компиляции.Декомпиляторы должны немного угадать, чтобы выяснить, как лучше всего представить то, что могло быть в оригинальном источнике.Например, то, что было циклом for в исходном коде, может оказаться декомпилированным как цикл while.

...