当前位置: 首页 > 知识库问答 >
问题:

Groovy包含新的Groovy脚本

甄阳朔
2023-03-14

我对Groovy很陌生,我想从主groovy脚本中的另一个groovy脚本中导入一个类。我已经看到了这篇文章。但是由于环境限制,我不能使用GroovyClassLoader之类的函数或导入任何库/框架。我唯一的可能性是使用评估方法。

我试过这个:

主脚本(评估不会抛出任何错误)

File csvFile = new File("./Csvreader.groovy");
evaluate(csvFile);

Csvreader脚本

class CSVReader{
    def csvFile = new File('./test.csv');
    def separatorChar = ";"
    def values = [];
    def headers = [];

    void setSeperator(String s){
        if(s != ""){
            separatorChar = s;
        }
    }

    void readCsv(){
        csvFile.eachLine{ line, number ->
            if(number == 1){
                def head = line.split(separatorChar);
                for (entry in head) {
                    headers.add(entry);
                }
            } else{
                def value = line.split(separatorChar);
                def map =[:];
                def i = 0;
                for (entry in value) {
                    map.put(headers[i], entry);
                    i++;
                }
                values.add(map);
            }
        }

    }

    def getValues(){
        return values;
    }

    def getHeaders(){
        return headers;
    }

    def getSize(){
        return values.size();
    }

    def getLine(def keyParam, def value){
        for(int i = 0; i < values.size(); i++){
            def line = values[i];
            if(values[i][keyParam] == value){
                return values[i];
            }
        }
        
    }

}

但是,我需要通过evaluate调用传递参数(并将方法移到类之外),或者需要创建类的实例。不幸的是,我真的不知道我如何才能做到这一点,有人有解决办法吗?

共有1个答案

田权
2023-03-14

您可以尝试在Csvreader的末尾添加。groovy将表达式归档,并返回CSVReader。类,它将返回一个已编译的类。

然后在调用者脚本中,您可以创建这个类的实例并将其用作任何其他类实例。

Csvreader.groovy

class CSVReader{
    def separatorChar = ";"
    
    void setSeparator(String s){
        if(s != ""){
            separatorChar = s;
        }
    }
}

return CSVReader.class

呼叫者脚本

File csvFile = new File("./Csvreader.groovy")
def CSVReaderClass = evaluate(csvFile)
def cvsReader = CSVReaderClass.newInstance()

cvsReader.setSeparator("Z")
println cvsReader.separatorChar
 类似资料:
  • 我有一些库脚本:lib1。groovy: lib2.groovy: lib3.groovy: 并希望在另一个脚本中使用它们:conf.groovy: conf.groovy是由用户配置的,他不知道我的后台lib脚本!他只知道提供的方法/任务:a()、b()、c()。实际上,我创建lib脚本是为了简化用户。 有没有办法将lib目录中的所有脚本(脚本lib1、lib2m、lib3)都包含到conf.g

  • 我使用groovy脚本中的方法创建了一个自定义dsl命令链。我从另一个groovy文件访问此命令链时遇到问题。是否有实现功能的方法? 我尝试过使用“evaluate”,它可以加载groovy文件,但无法执行命令链。我尝试过使用GroovyShell类,但无法调用这些方法。 我这里有一个小房间。groovy中执行“please show the cube\u root of 1000”会产生10的结

  • 问题内容: 我是Jenkins中使用的Groovy脚本的新手。我的问题是,我们如何根据作业名称和内部版本号获取作业的时间戳? 示例 :我想获取“ MyDeployJob”(JobName)的时间戳,并获取BuildNumber-105的时间戳。 我尝试使用方法方法,但无法正常工作。另外,我发现环境变量具有时间戳,但是我无法弄清楚如何使用Groovy Script获取细节。请帮助。 提前致谢。 问题

  • 我有一个基本的Groovy脚本,我希望尽可能简单地创建日志。我希望消息转到标准输出,以及一个日志文件,日志文件中的每个条目都有一个时间戳。 我不能使用@Log符号,因为它是一个脚本,我没有要注入的类。否则我认为这将是理想的。

  • 在Groovy脚本中到处搜索log4j日志记录到文件的工作示例。 没有显式类(它只是一个脚本)。没有圣杯。不到控制台。。。到文件。 只是一个带有log4j的普通groovy脚本。 log4j是最适合这一点的(groovy)还是其他日志库更好? 有人能给我举个例子或演示一下这是如何做到的吗?我设法把它送到控制台,但没有归档。 如果log4j配置也在config.groovy文件中,那就太好了,因为我

  • 当我尝试在soapUI测试步骤中解析响应时,收到了以下异常。也尝试了getXMLHolder方法。还是没运气。 答复如下