Gradle Junit检验失败了,与以相同依赖关系合作的相同确切代码

发布于 2025-02-12 15:52:16 字数 3709 浏览 0 评论 0 原文

由于组织限制,我正在使用 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的源代码无法正确解决工件。

感谢所有投入。 谢谢。

I am using gradle-2.8 version due to organisation restrictions.

I am trying to read YAML file (OpenAPI - swagger specification) using the following code :

new OpenAPIParser().readLocation(urlString, null, parseOptions).getOpenAPI();

which is present in both the main and test sourceSets as it is.

I have defined 2 configurations

  • swagConfig (for compile time dependencies)
  • swagRuntime (for runtime dependencies)

where swagRuntime consists of the following dependencies :

'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'

and the build.gradle includes the following :

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'
        }
    }
}

However, when I execute my main source-Set code, it works perfectly fine but when I run my test sourceSet based JUnit Test, I am running into failure :

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)

Debugging

After further debugging the stacktrace, my guess is that the jackson-dataformat-yaml artifact being used is somehow not 2.12.1 but 2.9 or less because in 2.9 the constructor of org.yaml.snakeyaml.events.ScalarEvent.<init> with that signature is not found (I could be wrong as well).

I have tried printing the

  • classpath
  • the testRuntime configuration and it's resolved artifacts.

and I see that the 2.12.1 version itself for jackson-dataformat-yaml is being picked up everywhere. But still I am not clear why the build (with junit) fails as explained above.

Could anyone help in debugging this further or any insight into why the test sourceSet for JUnits is not resolving the artifacts correctly.

Appreciate all inputs.
Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文