Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/grails/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从runnable jar执行时,缺少resolveStrategy会中断DSL_Java_Grails_Groovy_Jvm - Fatal编程技术网

Java 从runnable jar执行时,缺少resolveStrategy会中断DSL

Java 从runnable jar执行时,缺少resolveStrategy会中断DSL,java,grails,groovy,jvm,Java,Grails,Groovy,Jvm,我在我的一个Grails项目中使用,将一些数据导出为Excel文件 在我创建一个可运行的jar(使用gradle assemble)并使用它之前,一切都很好 我在这样的服务中使用生成器: class ExcelService { ... void export(OutputStream outputStream) { ... PoiSpreadsheetBuilder.create(outputStream).build { app

我在我的一个Grails项目中使用,将一些数据导出为Excel文件

在我创建一个可运行的jar(使用
gradle assemble
)并使用它之前,一切都很好

我在这样的服务中使用生成器:

class ExcelService {
    ...
    void export(OutputStream outputStream) {
       ...
       PoiSpreadsheetBuilder.create(outputStream).build {
          apply ExcelStylesheet
          ...
       } 
    }
    ...
}
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启动的应用程序中导出数据时,我将得到以下
MissingMethodException

groovy.lang.MissingMethodException: No signature of method: my.package.ExcelService.apply() is applicable for argument types: (java.lang.Class)
SpreadsheetBuilder的(Java)界面如下所示:

class ExcelService {
    ...
    void export(OutputStream outputStream) {
       ...
       PoiSpreadsheetBuilder.create(outputStream).build {
          apply ExcelStylesheet
          ...
       } 
    }
    ...
}
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);
}
公共界面电子表格生成器{
无效生成(@DelegatesTo(strategy=Closure.DELEGATE_FIRST,value=WorkbookDefinition.class)@ClosureParams(value=FromString.class,options=“builders.dsl.spreadsheet.builder.api.WorkbookDefinition”)配置器WorkbookDefinition);
}
在调试代码和jar的执行时,我在逐步执行
ClosureMetaClass
invokeMethod()
时发现了差异

closure.getResolveStrategy()时称为
关闭。将首先返回委托
。调试jar时,结果将是
0
,因此由于错误的解析策略,稍后将抛出
MissingMethodException

现在我不知道如何解决这个问题

这种行为的原因是什么? 我能做些什么来解决这个问题


我将Grails 3.3.8与Java OpenJDK 1.8.0结合使用。

@ClosureParams
@DelegatesTo
适用于
groovy.lang.Closure
类型的参数。在本例中,您已经将其应用于
Configurer

如果不需要支持JDK 7,您可以升级到Groovy电子表格生成器2.0.0.RC1,它仅与JDK 8兼容,但似乎可以解决问题

接口来自第三方库。它不在我的代码库中,当使用
gradle bootRun
时,一切都正常工作-当我创建并运行创建的jar时,它只是崩溃了。我能/应该做什么?