Нет такого метода DLS "стиль" (MarkupBuilder) - PullRequest
0 голосов
/ 13 сентября 2018

Я пытаюсь построить строку в формате html, чтобы отправить ее как электронное письмо в конвейер jenkins.У меня есть следующий фрагмент кода:

import groovy.xml.MarkupBuilder

def writer = new StringWriter()
def html = new MarkupBuilder( writer )

html.table( class: "squishSummary" ) {
    style( type: "text/css" ) {
        mkp.yield( getTableStyle() )
    }
    ...
}

def getTableStyle() {
    ....
}

К сожалению, это приводит к ошибке при выполнении конвейера: java.lang.NoSuchMethodError: No such DSL method 'style' found among steps [...] Если я правильно понимаю, сервер jenkins пытается выполнить команду style какДженкинс построить шаг, что разумно не удается.Как я могу это исправить?

1 Ответ

0 голосов
/ 13 сентября 2018

следующий код работает нормально:

import groovy.xml.MarkupBuilder

def writer = new StringWriter()
def html = new MarkupBuilder( writer )

html.table( class: "squishSummary" ) {
    style( type: "text/css" ) {
        mkp.yield("123")
    }
}
println writer

однако, если вы объявите переменную с именем style, вы получите ошибку, аналогичную вашей

, поэтому этот код не будет работать с groovy.lang.MissingMethodException: No signature of method ...

import groovy.xml.MarkupBuilder

def writer = new StringWriter()
def html = new MarkupBuilder( writer )

def style = "my style1" //just add this line and code fails

html.table( class: "squishSummary" ) {
    style( type: "text/css" ) {
        mkp.yield("123")
    }
}

println writer

для решения проблемы используйте delegate или GString вместо простого имени метода:

import groovy.xml.MarkupBuilder

def writer = new StringWriter()
def html = new MarkupBuilder( writer )

def style = "style1"

html.table( class: "squishSummary" ) {
    delegate.style( type: "text/css" ) {
        mkp.yield("123")
    }
    //or like this:
    "${'style'}"( type: "text/css" ) {
        mkp.yield("123")
    }
}

println writer
...