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

标签 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

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

最佳答案

我希望您导入字段注释包并更正变量的声明。为它们指定一些数据类型以及@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

creating and accessing the global variables in Groovy 的引用链接

关于java - 脚本在在线编辑器中工作,但在 java GroovShell 中不工作(没有这样的属性),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39729874/

相关文章:

java - 在 Java 中使用 Selenium 截取包括任务栏的屏幕截图

java - int[] 数组的排列-添加到列表

java - 编译的 Groovy 脚本

java - 您可以使用 Groovy 元编程来覆盖 Java 类上的私有(private)方法吗

groovy - 为什么 DataFlow 变量只能分配一次

java - Firebase 回收适配器,带有使用 searchview 的过滤器

java - 什么样的设计模式适合这里?

java - 为什么我的 AES 加密会引发 InvalidKeyException?

php - 在 php 中执行我自己的 groovy 脚本

unit-testing - Gradle忽略了我的Spock单元测试之一,并没有告诉我为什么