【问题标题】:groovy.lang.missingMethodException when running code as a .jar将代码作为 .jar 运行时出现 groovy.lang.missingMethodException
【发布时间】:2020-07-30 21:57:26
【问题描述】:

我在 groovy 中有这段代码来解析一个 json 文件:

File file = new File(configFile)
def config = new JsonSlurper().parse(file)

当我在 Intellij 中运行它时,它工作得很好。然后我构建它以创建一个 .jar 然后在终端中执行它: java -jar file.jar 我得到以下异常执行它:

    Exception in thread "main" groovy.lang.MissingMethodException: No signature of method: groovy.json.JsonSlurper.parse() is applicable for argument types: (File) values: [./resources/config.json]
Possible solutions: parse(java.io.Reader), use([Ljava.lang.Object;), wait(), any(), grep(), wait(long)
    at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:70)
    at org.codehaus.groovy.runtime.callsite.PojoMetaClassSite.call(PojoMetaClassSite.java:46)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:47)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:125)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:139)
    at org.forgerock.migrator.ConfigLoader.loadConfig(ConfigLoader.groovy:35)
    at org.forgerock.migrator.ConfigLoader$loadConfig.call(Unknown Source)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:47)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:125)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:139)
    at org.forgerock.migrator.processor.ProcessorFactory.getProcessor(ProcessorFactory.groovy:42)
    at org.forgerock.migrator.processor.ProcessorFactory$getProcessor.call(Unknown Source)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:47)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:125)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:139)
    at org.forgerock.migrator.Migration.main(Migration.groovy:35)

我已确认 groovy 版本为 3.0.1。我也尝试在 java 8 和 11 上运行它。任何建议将不胜感激。谢谢。

更新:

这是我使用 Groovy 3.0.1 运行代码的方式:

【问题讨论】:

  • parse 可以采用java.io.File,但这似乎与您代码中的File 不同。
  • 旧版本的 groovy 不接受新 JsonSlurper().parse(file) 的文件。使用:new JsonSlurper().parse(file.newReader("UTF-8"))。绝对是你的 groovy 运行时比 2.2 版本更旧
  • 我很确定 new JsonSlurper().parse(file.newReader("UTF-8")) 会起作用。问题是为什么它在 IDE 中可以工作,但在两个 Groovy 版本都为 3.0.1 时执行 jar 文件时却不行?这就是让我困惑的地方。
  • 表示运行时groovy版本不同。

标签: java groovy missingmethodexception jsonslurper


【解决方案1】:

我已经解决了这个问题。在解决问题时,我决定完全忽略编译警告,警告告诉我这是项目中 Groovy 版本的冲突。 这个冲突来自我在 pom.xml 中的依赖。这个特定的依赖项将 Groovy 2.1.9 作为子依赖项添加到项目中,所以我不得不删除它并且警告消失了。 JsonSlurper 也开始工作,因为现在它实际上使用的是 3.0.1 版

【讨论】:

    猜你喜欢
    • 2017-06-05
    • 2012-12-01
    • 2014-03-30
    • 2014-07-21
    • 2010-12-01
    • 2019-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多