Gradle Junit检验失败了,与以相同依赖关系合作的相同确切代码
由于组织限制,我正在使用 Gradle-2.8 版本。
我正在尝试使用以下代码读取YAML文件(OpenAPI -Swagger规范):
new OpenAPIParser().readLocation(urlString, null, parseOptions).getOpenAPI();
在 MAIN
和 test
sourcesets中都存在。
我已经定义了2种配置
swagconfig
(用于编译时间依赖关系)-
swagruntime
(对于运行时依赖关系),
其中 swagruntime
由以下依赖关系组成:
'com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.12.1'
'com.fasterxml.jackson.core:jackson-databind:2.12.1'
'com.fasterxml.jackson.core:jackson-core:2.12.1'
'com.fasterxml.jackson.core:jackson-annotations:2.12.1'
和构建.gradle包含以下内容:
configurations {
compile.extendsFrom swagConfig
runtime.extendsFrom swagRuntime
runtime {
resolutionStrategy {
force 'com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.12.1'
force 'com.fasterxml.jackson.core:jackson-databind:2.12.1'
force 'com.fasterxml.jackson.core:jackson-core:2.12.1'
force 'com.fasterxml.jackson.core:jackson-annotations:2.12.1'
}
}
testRuntime {
resolutionStrategy {
force 'com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.12.1'
force 'com.fasterxml.jackson.core:jackson-databind:2.12.1'
force 'com.fasterxml.jackson.core:jackson-core:2.12.1'
force 'com.fasterxml.jackson.core:jackson-annotations:2.12.1'
}
}
}
但是,当我执行 MAIN
source-set代码时,它可以正常工作,但是当我运行 test
时,基于源的JUNIT测试,我遇到了失败:
java.lang.NoSuchMethodError: org.yaml.snakeyaml.events.ScalarEvent.<init>(Ljava/lang/String;Ljava/lang/String;Lorg/yaml/snakeyaml/events/ImplicitTuple;Ljava/lang/String;Lorg/yaml/snakeyaml/error/Mark;Lorg/yaml/snakeyaml/error/Mark;Lorg/yaml/snakeyaml/DumperOptions$ScalarStyle;)V
at com.fasterxml.jackson.dataformat.yaml.YAMLGenerator._scalarEvent(YAMLGenerator.java:908)
at com.fasterxml.jackson.dataformat.yaml.YAMLGenerator._writeScalar(YAMLGenerator.java:879)
at com.fasterxml.jackson.dataformat.yaml.YAMLGenerator.writeNull(YAMLGenerator.java:787)
at com.fasterxml.jackson.databind.ser.std.NullSerializer.serialize(NullSerializer.java:30)
at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider._serializeNull(DefaultSerializerProvider.java:495)
at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:303)
at com.fasterxml.jackson.databind.ObjectWriter$Prefetch.serialize(ObjectWriter.java:1514)
at com.fasterxml.jackson.databind.ObjectWriter._writeValueAndClose(ObjectWriter.java:1215)
at com.fasterxml.jackson.databind.ObjectWriter.writeValueAsString(ObjectWriter.java:1085)
at io.swagger.v3.core.util.Yaml.pretty(Yaml.java:23)
at io.swagger.v3.parser.converter.SwaggerConverter.readResult(SwaggerConverter.java:113)
at io.swagger.v3.parser.converter.SwaggerConverter.readLocation(SwaggerConverter.java:91)
at io.swagger.parser.OpenAPIParser.readLocation(OpenAPIParser.java:16)
调试
在进一步调试StackTrace之后,我的猜测是 Jackson-Dataformat-yaml
fastifact 被使用的是不 2.12.1
但<代码> 2.9 或以下是因为 2.9
org.yaml.snakeyaml.events.scalarevent。
我尝试打印
classPath
-
testruntime
配置及其已解决的伪像。
而且我看到 2.12.1
版本本身为 jackson-dataformat-yaml
在各处拾取。但是我仍然不清楚为什么构建(带有Junit)失败了,如上所述。
任何人都可以帮助您进一步调试此事,或者任何洞察力 test junits的源代码无法正确解决工件。
感谢所有投入。 谢谢。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论