我是第一次使用 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
完全相同的脚本一旦运行没有问题,一旦抛出异常。怎么可能?它甚至都不复杂,变量声明应该是正确的,不是吗?
最佳答案
我希望您导入
字段注释
包并更正变量的声明。为它们指定一些数据类型
以及@Field 注释
以访问脚本中任何位置的变量。
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
关于java - 脚本在在线编辑器中工作,但在 java GroovShell 中不工作(没有这样的属性),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39729874/