如何检查groovy脚本的编译错误[重复]

2024-02-19

我们可以使用下面的代码在运行时创建并运行 groovyscript

import groovy.lang.GroovyClassLoader;
import groovy.lang.GroovyObject;

import java.io.File;
import java.io.IOException;

        // Create a String with Groovy code.
        final StringBuilder groovyScript = new StringBuilder();
        groovyScript.append("class Sample {");
        groovyScript.append(" String sayIt() { return \"Groovy says: Cool jajaja\" }");
        groovyScript.append("}");



        GroovyClassLoader gcl = new GroovyClassLoader()

        GroovyCodeSource codeSource = new GroovyCodeSource(groovyScript.toString(), "aa", GroovyShell.DEFAULT_CODE_BASE)

        //GCL will check for enabled cache over code source and use sourceCache to cache code with name
        def scriptClass =  gcl.parseClass(codeSource)
                def classInstance = scriptClass.newInstance()

assert "Groovy says: Cool jajaja".equals(classInstance.sayIt())

现在假设在上面的代码中,我们引入了一个错误,现在上面的代码如下:

import groovy.lang.GroovyClassLoader;
import groovy.lang.GroovyObject;

import java.io.File;
import java.io.IOException;

        // Create a String with Groovy code.
        final StringBuilder groovyScript = new StringBuilder();
        groovyScript.append("class Sample {");
        groovyScript.append("jajaja");
        groovyScript.append(" String sayIt() { return \"Groovy says: Cool jajaja\" }");
        groovyScript.append("}");

        GroovyClassLoader gcl = new GroovyClassLoader()

        GroovyCodeSource codeSource = new GroovyCodeSource(groovyScript.toString(), "aa", GroovyShell.DEFAULT_CODE_BASE)

        //GCL will check for enabled cache over code source and use sourceCache to cache code with name
        def scriptClass =  gcl.parseClass(codeSource)
                def classInstance = scriptClass.newInstance()

assert "Groovy says: Cool jajaja".equals(classInstance.sayIt())

请注意,我们在类声明之后的脚本中添加了“jajaja”。

这里应该做什么才能知道我们的脚本存在编译错误并且会因 MissingPropertyException 或其他异常而失败。

当尝试与 groovyConsole 相同时,它会破坏脚本并出现以下错误

1 compilation error:

unexpected token: jajaja at line: 1, column: 15

我们可以在运行脚本之前测试脚本是否有编译错误吗? 对于这段代码,添加 try catch 块对我来说不起作用。


GroovyShell 通过使用 try-catch 块可以很好地工作。

                  GroovyCodeSource codeSource = new GroovyCodeSource(script, "aa", GroovyShell.DEFAULT_CODE_BASE)

        //GCL will check for enabled cache over code source and use sourceCache to cache code with name
        def scriptClass
        try {
            def shell = new GroovyShell()
            def data = shell.parse(codeSource.scriptText)
            data.run()
        }catch (Throwable e){
            status = false
        }
        if(!status){
            return "domain.script.compilation.errors"
        }else{
            return true
        }

不过,一个后备方案是,只要您有一个不完整的脚本代码,其余的代码就会稍后从其他脚本添加。这段代码将会失败,但这是开发人员的问题,而不是技术问题。

此外,这将运行脚本,这可能会导致数据更新,这是不好的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何检查groovy脚本的编译错误[重复] 的相关文章

  • Jenkins 多分支:更改 Groovy 的工作描述

    我在詹金斯的多分支项目工作正常 但我想修改job描述 默认情况下为 完整项目名称 xxxx 以更有意义 我可以使用以下命令轻松更改构建描述currentBuild当我的变量Jenkinfile已执行 但我不知道如何修改父作业描述 我的用例是
  • 我怎样才能拦截从 Java 到 Groovy 的调用——或者轻松地模拟它

    我本来希望使用 groovy 的 invokeMethod 来做到这一点 但事实证明 当您从 Java 调用 Groovy 时 不会调用 invokeMethod 但否则它会完美地工作 我有一个案例 我将 Groovy 类提交给 Java
  • 或者在 Grails 2.3.8 的namedQueries 中:AbstractMethodError

    从 Grails 2 2 4 升级到 2 3 8 后 我得到 java lang AbstractMethodError grails orm HibernateCriteriaBuilder or Lgroovy lang Closure
  • 在 Groovy 中将整数转换为 BigDecimal

    假设我们有一个 groovy 函数作为参数BigDecimal void func BigDecimal bd 并在 groovy 的其他课程中再次调用它var func 0 这工作正常 但在 java 中它根本无法编译 我知道有一个构造函
  • 根据环境执行特定的Geb测试

    我正在 Grails 项目中执行一组规范测试 当我在本地时 我需要执行一组特定的规范 当我运行预生产环境时 我需要执行另一组规范 我当前的配置正在同时执行两个环境的所有规范 这是我想避免的 我有多个环境 已在 GebConfig 中配置 e
  • GStringImpl 无法转换为 java.lang.String

    我使用 Grails 和 Spring Security 时收到以下错误 还有其他人遇到过这样的问题吗 如果是这样 你的解决办法是什么 Error Exception in thread Thread 15 Error java lang
  • 以无法破坏的方式限制表中允许的记录数量

    我们有一个 Web 应用程序 Grails 我们将根据用户数量为其出售许可证 数据库 Oracle 10g 中有一个表保存用户 客户将托管自己的软件和数据库副本 有人可以建议一些策略来限制允许存在于用户表中的记录数量 从而使客户无法合理地破
  • 从 Grails 控制器渲染视频内容

    毫无疑问又是一个愚蠢的新手问题 我在 Grails 控制器中有一个字节数组 其中包含视频文件 确切地说是 mp4 文件 的内容 我熟悉如何从 grails 控制器渲染 JSON XML 和其他基本类型 但我找不到任何显示如何输出视频的示例
  • Grails:SpringSecurity 角色层次结构未按预期工作

    我正在 Grails 2 0 1 中使用 springsecurity 插件 我的角色层次结构和其他 s2 属性如下所示 grails plugins springsecurity userLookup userDomainClassNam
  • 在 gradle-5.1.1 中用什么代替 TaskInternalexecute() ?

    我的自定义任务位于gradle 4 10 1 task fabricUploadApkDevelop group fabric dependsOn assembleDevDebug doLast fabric gradle task ass
  • 需要正则表达式帮助

    我正在尝试替换两次或多次出现的 br like br br br 标签与两个一起 br br 具有以下模式 Pattern brTagPattern Pattern compile lt s br s s gt s 2 Pattern CA
  • 在 GORM 中重命名复合外键

    我有以下课程 class Catalog static mapping id composite name manufacturer columns name column cat name manufacturer column manu
  • 如何将用户输入密码与凭据密码进行比较

    我有一个脚本化管道 它使用以下命令请求用户的密码input函数并将其与用户保存的凭据密码进行比较 如果用户输入的是一个类型string然后就可以了 但是 当我将输入类型更改为password 因此当用户键入它时 它在屏幕上不可见 它会失败并
  • 如何将 TIFF ImageReader 添加到 Grails 中注册的图像读取器中

    我正在尝试创建一个 Grails 应用程序 它可以显示 TIFF 文件和其他图像的预览 背景 这些图像是由 SOAP 服务构建的 该服务为我提供图像的字节 在服务方法中 我获取 byte 从中构造一个 ByteArrayInputStrea
  • 将文件和关联数据发布到 RESTful Web 服务(最好以 JSON 形式)

    在一个应用程序中 我正在开发 RESTful API 我们希望客户端以 JSON 形式发送数据 该应用程序的一部分要求客户端上传文件 通常是图像 以及有关图像的信息 我很难在单个请求中追踪这种情况是如何发生的 是否可以将文件数据 Base6
  • 如何在 Gradle 中使用 if else 条件

    有人可以告诉我如何在 gradle 脚本中编写 if else 条件吗 我的意思是我有两种不同类型的 zip 文件 一种是 LiceseGenerator 4 0 0 58 另一种是 CLI 4 0 0 60 我的部署脚本工作正常 但我使用
  • OS X - 输入“grails”命令后终端重置

    在我的 bash profile 中 我有以下几行 export GRAILS HOME usr share java grails export PATH PATH GRAILS HOME bin GRAILS HOME 是同一目录中 g
  • Grails Spring Security 插件将用户密码从 1.2.7.3 迁移到 2.0

    我正在使用 Grails 2 3 2 并尝试将我的 Spring Security Core 插件从 1 2 7 3 升级到 2 0 我进行了所有导入更改并启动了我的应用程序 但我无法登录 2 0的变化之一是它使用了bcrypt算法作为密码
  • 如何从 Grails 中的 UrlMapping 中排除特定关键字?

    我在 Grails 中使用以下 url 映射 id controller user action show 映射网址 例如mydomain com someusername 如何将约束附加到 url 映射以排除 登录 注销 等关键字 IE
  • 更改 Grails 的 Groovy 版本

    如何将 Grails 1 3 7 使用的 groovy 版本更改为 groovy 1 7 9 我在 Grails 1 3 7 应用程序中遇到这个问题 其中 Quartz 进程每分钟都会实例化大约 500 个新对象 如下所示 class Fo

随机推荐

  • 绘制具有颜色渐变的矩阵“光谱图”

    使用 STFT 短时傅立叶变换 后 输出是一个表示 3d 图的矩阵 就像 A X Y M A是输出矩阵 X是时间 Y是频率 第三维M是由像素颜色强度表示的幅度 如下图所示 频谱图2 https i stack imgur com mtWqb
  • 使用 Caret 在 R 中创建 k 折 CV 的折叠

    我正在尝试使用以下位置提供的数据为几种分类方法 hiperparameters 制作 k 折 CVhttp archive ics uci edu ml machine learning databases undocumented con
  • 如何知道ios中UIKeyboard上按下了哪个键? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我正在实现一个 iPad 应用程序
  • R中PRROC包的精确召回曲线计算

    我的问题与this https stackoverflow com questions 25020788 in r calculate area under precision recall curve aupr问题 我对计算精确召回曲线
  • 将 JAR 添加到 IntelliJ 中的 WEB-INF/lib 目录中的正确步骤是什么

    假设我有一个 Java Web 项目 我需要将几个 JAR 放入 WEB INF lib 目录中 在 Eclipse 中 如果您只是将这些 JAR 放在那里 Eclipse 就会像在类路径上一样拾取它们 然而 IntelliJ 似乎没有 将
  • 从 Python 类获取所有 @properties [重复]

    这个问题在这里已经有答案了 在Python中 我怎样才能得到所有特性一个类的所有成员 即由该类创建的所有成员 property装饰师 There are at least two questions 1 2 on stackoverflow
  • 计算与谓词匹配的元素数量的惯用方法是什么?

    除了这个之外 是否有更好的方法来计算谓词函数为 true 的元素数量 PredCount lst pred Length Select lst pred 我问这个问题是因为构建一个子集似乎效率低下lst with Select 并且因为Co
  • 将作曲家 1 和 2 保留在同一台机器上

    我们如何在同一台机器上使用 Composer 1 和 Composer 2 作为一名开发人员 我们在同一台机器上处理多个项目 并且项目 1 需要 Composer 1 项目 2 需要 compower 版本 2 这就是我曾经在同一台机器上安
  • 为什么我不能在 MySQL 中使用特定的排序规则?

    我有一个包含字符集的表latin1 通过检查show variables like character set database 和默认排序规则latin1 swedish ci 通过检查SHOW TABLE STATUS 我想使用排序规则
  • 如何部署线程安全的异步 Rails 应用程序?

    我在网上阅读了大量有关不同版本的 Ruby 和 Rails 中的线程安全和性能的材料 我想我现在已经很好地理解了这些内容 奇怪的是 讨论中似乎缺少的是如何实际部署异步 Rails 应用程序 当谈论应用程序中的线程和同步性时 人们想要优化两件
  • 寻找用于在细分域上进行数值积分的 Python 包

    我想知道是否有人知道基于 numpy scipy 的 python 包 可以在镶嵌域 在我的具体情况下 由 voronoi 单元格界定的 2D 域 上对复杂的数值函数进行数值积分 过去 我使用了 matlab 文件交换之外的几个包 但如果可
  • Netbeans 外部控制台错误

    我正在尝试使用 netbeans 在 Windows 10 中 在 C 中编译一个简单的 hello world 程序 但是出现以下错误 sh cygdrive c Users myuser 1 AppData local Temp dli
  • 如何获得随机数,每个数字都有自己的概率[重复]

    这个问题在这里已经有答案了 例如 我想从集合 S 0 1 2 3 中获取随机数 但现在每个数字都有不同的概率 而不是每个数字都有相同的显示概率 即 25 比如说 50 30 20 10 我该如何编码 在 Java 或 C 中 我更喜欢 C
  • 在共享内存中初始化 pthread 互斥体

    我可以使用初始化器初始化静态内存中的互斥体 pthread mutex t mymutex PTHREAD MUTEX INITIALIZER 但是如何在共享内存中初始化一个变量 在该内存中我必须与初始化变量分开分配内存 我可以执行 mem
  • 怎样才能让到处下雨呢?

    我想创建一个下雨效果我的天气应用程序 https thewthr app 仅使用 CSS 然而 尽管我在外观上取得了令人满意的结果 但我似乎无法让它们连续覆盖整个屏幕 而不仅仅是随机的块 我该怎么办 body overflow hidden
  • 获取 Dexie 中的 GroupBy 计数

    我有一个索引数据库下表接受以下结构化 JSON 作为一行 id 1 name doc1 createdDate 2018 08 08 我想计算表中每个可用日期的数量 IE groupby 日期然后计数 预期示例输出的格式为 2018 08
  • 如何区分堆栈 DICOM 图像和概览图像?

    I have a stack of DICOM coronal images where I have used the Image Position Patient 0020 0032 tag to sort the images in
  • PHPUnit 接收系统日志消息吗?

    我正在使用打开日志的方法测试记录器类 如下所示 openlog this gt identifier this gt option this gt facility syslog level message closelog The fac
  • 将库的文档添加到手册页

    我正在使用 Ubuntu 12 04 1 我正在学习使用 C 中的 FFmpeg 库制作一个基本的视频播放器 我的手册页没有显示库的标题 函数的任何条目 有人可以告诉我一种将文档添加到我的手册页的方法吗 这样搜索比每次都在网页上搜索要容易得
  • 如何检查groovy脚本的编译错误[重复]

    这个问题在这里已经有答案了 我们可以使用下面的代码在运行时创建并运行 groovyscript import groovy lang GroovyClassLoader import groovy lang GroovyObject imp