脚本在在线编辑器中工作但在java GroovShell中没有(没有这样的属性)

时间:2016-09-27 16:29:35

标签: java groovy

我第一次和Groovy一起工作。我有一个简单的脚本,我想在我的Java服务器上运行。

我在这里构建脚本MyScript in the Groovy web console,当我运行它时,它会返回我期望的[1,10]

minValue=1;
maxValue=10;
listValues=[];
enumMap=[];
rangeType="RANGE"; //RANGE,LIST,ENUM,NONE


Object test(int arg){
    return getRange();
}


Object[] getRange(){
    if (rangeType=="NONE"){
        return [];
    }

    if (rangeType=="RANGE"){
        return [minValue,maxValue];
    }

    if (rangeType=="LIST"){
        return listValues;
    }

    if (rangeType=="ENUM"){
        return enumMap;
    }
}

println(test(1));

在我的Java服务器上,我以这种方式调用test方法

Script groovyScript = new GroovyShell().parse(script);
return groovyScript.invokeMethod("test", valueSuccess);

虽然脚本在Web控制台中运行良好,但是当我在服务器上运行它时,它会给我以下异常:

groovy.lang.MissingPropertyException: No such property: rangeType for class: Script1

一旦抛出异常,完全相同的脚本一旦运行就没有问题。怎么可能?它甚至不复杂,变量声明应该是正确的,不是吗?

1 个答案:

答案 0 :(得分:1)

我希望你import field annotation个包并更正变量的decalartion。为它们指定一些datatype以及@Field annotation来访问变量中的任何位置脚本。

import groovy.transform.Field

@Field int minValue   = 1;
@Field int maxValue   = 10;
@Field List listValues= [];
@Field Map enumMap    = [:];
@Field def rangeType  = "RANGE"; //RANGE,LIST,ENUM,NONE

creating and accessing the global variables in Groovy

的参考链接