如何使用GroovyScript和Jenkins导入类?

如何使用GroovyScript和Jenkins导入类?,jenkins,groovy,Jenkins,Groovy,我在groovy文件中有以下内容 // jenkins/Application.groovy package jenkins class Application{ String name Application(name){ this.name = name } } 我正试图导入它,我已经尝试过这些,但似乎没有一个工作。这些都在jenkins/Test.groovy中 final GroovyScriptEngineImpl engine = (Gro

我在groovy文件中有以下内容

// 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:无法解析类应用程序

然后我试着

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

def dna = new app.Application("blah")
我得到

Script1.groovy:11:无法解析类app.Application

如何在Jenkins GroovyScript中导入调用

更新

我将代码更改为以下内容(并移动到域文件夹中)

当我跑的时候我得到

org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException:不允许脚本使用staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods newInstance java.lang.Class java.lang.Object[]


想法

您可以从加载的脚本返回类(不是实例)

然后,要创建新实例,可以调用
class.newInstance(Object[]argList)

因此,理论上这应该是可行的:

/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" )

是詹金斯管道吗?或者只是Jenkins中的groovy插件?它是一个管道如果在同一个文件中,它也可以正常工作。为什么不使用标准方式:?相关想法:谢谢!知道如何在构造函数中使用该类型吗?我知道groovy不是类型化的,但我希望我可以使用它在管道中获取[ERROR]异常:没有方法签名:java.lang.Class.newInstance()适用于参数类型:(java.util.ArrayList)值:[[103740]]可能的解决方案:newInstance(),newInstance(),newInstance([Ljava.lang.Object;),isInstance(java.lang.Object)对于你的更新,有一个标准的解决方案-管理员。我不确定我是否遵循了这一点。这是否意味着管理员必须配置一些东西,因为这可能不会发生。这是一个非常标准的安全问题。只需在Internet上搜索。Jenkins限制调用某些方法。
def app = load "./jenkins/Application.groovy"
def dna = app.newInstance( "blah" )