Как мне импортировать класс, используя GroovyScript и Jenkins? - PullRequest
0 голосов
/ 19 июня 2019

У меня есть следующее в заводной файл ...

// jenkins/Application.groovy
package jenkins

class Application{
    String name
    Application(name){
        this.name = name
    }
}

Я пытаюсь импортировать его, и я пробовал это, но, похоже, ни один из них не работает. Это все в jenkins / Test.groovy

final GroovyScriptEngineImpl engine = (GroovyScriptEngineImpl) this.scriptingEngines.getEngineByName("groovy");
GroovyClassLoader classLoader = engine.getClassLoader();
classLoader.parseClass(new GroovyCodeSource("./jenkins/Application.groovy"))
engine.setClassLoader(classLoader)

Это дает ..

Script1.groovy: 17: невозможно разрешить класс Application

Тогда я попробовал ...

// jenkins/Application.groovy
// Added
return { Application }
// jenkins/Test.groovy
app = load "./jenkins/Application.groovy"

def dna = new app.Application("blah")

и я получаю ...

Script1.groovy: 11: невозможно разрешить приложение класса. Приложение

Как импортировать вызов в Jenkins GroovyScript?

Обновление

Я изменил свой код на следующий (и переместился в папку домена) ...

app = load "./jenkins/domain/Application.groovy"
def dna = app.newInstance([name:"blah"] as Object[])

Когда я бегу, я получаю ...

org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException: сценариям запрещается использовать staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods newInstance java.lang.Class java.lang.Object []

1 Ответ

1 голос
/ 20 июня 2019

идея

вы можете вернуться из загруженного скрипта - класс (не экземпляр)

затем, чтобы создать новый экземпляр, вы можете вызвать class.newInstance( Object [] argList )

http://docs.groovy -lang.org / последний / html / заводной-JDK / Java / языки / Class.html # newInstance (java.lang.Object [])

Итак, теоретически это должно работать:

. / Jenkins / Application.groovy


class Application{
    String name
    Application(name){
        this.name = name
    }
}

return Application.class

Трубопровод:

def app = load "./jenkins/Application.groovy"
def dna = app.newInstance( "blah" )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...