Java 从runnable jar执行时,缺少resolveStrategy会中断DSL
我在我的一个Grails项目中使用,将一些数据导出为Excel文件 在我创建一个可运行的jar(使用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
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时,它只是崩溃了。我能/应该做什么?