为了账号安全,请及时绑定邮箱和手机立即绑定

从可运行 jar 执行时缺少 resolveStrategy 会破坏 DSL

从可运行 jar 执行时缺少 resolveStrategy 会破坏 DSL

交互式爱情 2022-04-28 16:06:22
我在我的一个 Grails 项目中使用 Groovy Spreadsheet Builder将一些数据导出为 Excel 文件。gradle assemble在我创建一个可运行的 jar(使用)并使用它之前,一切都很好。我在这样的服务中使用构建器:class ExcelService {    ...    void export(OutputStream outputStream) {       ...       PoiSpreadsheetBuilder.create(outputStream).build {          apply ExcelStylesheet          ...       }     }    ...}当我尝试从使用生成的 jar 开始的应用程序中导出数据时,我将得到以下信息MissingMethodException:groovy.lang.MissingMethodException: No signature of method: my.package.ExcelService.apply() is applicable for argument types: (java.lang.Class)SpreadsheetBuilder 的 (Java) 接口如下所示:public interface SpreadsheetBuilder {  void build(@DelegatesTo(strategy = Closure.DELEGATE_FIRST, value = WorkbookDefinition.class) @ClosureParams(value = FromString.class, options = "builders.dsl.spreadsheet.builder.api.WorkbookDefinition") Configurer<WorkbookDefinition> workbookDefinition);}在调试代码和 jar 的执行时,我在单步invokeMethod()执行ClosureMetaClass.在closure.getResolveStrategy();工作版本中调用Closure.DELEGATE_FIRST时将返回。调试jar,结果会0因为MissingMethodException解析策略错误而导致稍后抛出。目前我不知道如何解决这个问题。这种行为的原因是/可能是什么?我能做些什么来解决这个问题?我将 Grails 3.3.8 与 Java OpenJDK 1.8.0_192 一起使用。
查看完整描述

2 回答

?
弑天下

TA贡献1818条经验 获得超8个赞

如果您不需要支持 JDK 7,您可以升级到 Groovy Spreadsheet Builder 2.0.0.RC1,它只兼容 JDK 8,但似乎可以解决问题。



查看完整回答
反对 回复 2022-04-28
?
30秒到达战场

TA贡献1828条经验 获得超6个赞

@ClosureParams并且@DelegatesTo适用于 type 的参数groovy.lang.Closure。在这种情况下,您已将其应用于Configurer<WorkbookDefinition>.



查看完整回答
反对 回复 2022-04-28
  • 2 回答
  • 0 关注
  • 171 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号