这个问题在这里已经有了答案: 为什么我得到“异常; 当我尝试编译我的 Java 代码时,必须被捕获或声明被抛出”? (6 个回 ...
提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供 中文繁体 英文版本 中英对照 版本,有任何建议请联系yoyou2525@163.com。
由于组织限制,我正在使用gradle-2.8版本。
我正在尝试使用以下代码读取 YAML 文件(OpenAPI - swagger 规范):
new OpenAPIParser().readLocation(urlString, null, parseOptions).getOpenAPI();
它按原样存在于main
源集中和test
源集中。
我已经定义了 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'
build.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
源集代码时,它工作得非常好,但是当我运行基于我的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)
调试
在进一步调试堆栈跟踪之后,我的猜测是正在使用的jackson-dataformat-yaml
工件不知何故不是2.12.1
而是2.9
或更低,因为在2.9
中, org.yaml.snakeyaml.events.ScalarEvent.<init>
的构造函数与找不到签名(我也可能是错的)。
我试过打印
classpath
testRuntime
配置及其已解决的工件。 我看到jackson-dataformat-yaml
的2.12.1
版本本身正在被到处使用。 但是我仍然不清楚为什么构建(使用junit)会如上所述失败。
任何人都可以帮助进一步调试这一点,或者了解为什么 JUnits 的test
sourceSet 没有正确解析工件。
感谢所有输入。 谢谢。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.