我第一次和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
一旦抛出异常,完全相同的脚本一旦运行就没有问题。怎么可能?它甚至不复杂,变量声明应该是正确的,不是吗?
答案 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
的参考链接