Java8 ServiceLoader:无法加载FastStringService

问题描述 投票:0回答:1
在我的 Java8 Spring boot 应用程序中,它依赖于

groovy-json

 库版本 3.0.19 来执行 groovy 脚本,当我的应用程序 war 文件部署在 Tomcat 中而不是部署在 Docker 或本地开发设置中时,它会失败并出现以下异常。在执行像 
new groovy.json.JsonSlurper().parseText('{}')
 这样的脚本时,我看到以下异常:

'javax.script.ScriptException:java.lang.RuntimeException:无法加载FastStringService'

以上运行时异常来自 groovy-json 包中的这部分代码:

https://github.com/apache/groovy/blob/GROOVY_3_0_19/subprojects/groovy-json/src/main/java/org/apache/groovy /json/internal/FastStringUtils.java#L35-L59

我寻找了冲突的依赖项,我的应用程序中只有这个版本的 groovy-json 库。所讨论的特定类确实存在于我的工件中。关于这个错误有什么想法吗?

更新:

堆栈跟踪:

"Caused by: java.lang.RuntimeException: Unable to load FastStringService", " at org.apache.groovy.json.internal.FastStringUtils.getService(FastStringUtils.java:56)", " at org.apache.groovy.json.internal.FastStringUtils.toCharArray(FastStringUtils.java:66)", " at org.apache.groovy.json.internal.BaseJsonParser.parse(BaseJsonParser.java:113)", " at groovy.json.JsonSlurper.parseText(JsonSlurper.java:204)", " at groovy.json.JsonSlurper$parseText.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 Script449.run(Script449.groovy:2)", " at org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.eval(GroovyScriptEngineImpl.java:317)", " ... 155 more"``` Tomcat version: 9.0.71
    
java groovy java-8 serviceloader
1个回答
0
投票
有时,当 java 和 groovy 的源代码位于多个源目录中时,编译器会发现很难解决依赖关系,因此您可以通过将以下内容添加到您的文件中,告诉 gradle/编译器在哪里可以找到要为项目编译的源代码

build.gradle

sourceSets { main { groovy { srcDirs = ['src/main/java', 'src/main/groovy'] } resources { srcDirs = ['src/main/resources'] } } }
    
© www.soinside.com 2019 - 2024. All rights reserved.