首页 > 解决方案 > 基于 Maven 的示例引发异常

问题描述

我遇到了与其他一些尝试在 openapi YAML 规范中使用 spring-cloud-contract-oa3 插件和合同的人非常相似的问题。

我正在使用带有 2.1.2.0 插件和 3.0.3 的 SCC 的 Maven -

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-contract-maven-plugin</artifactId>
                <version>3.0.3</version>
                <extensions>true</extensions>
                <configuration>
                    <testFramework>JUNIT5</testFramework>
                    <baseClassForTests>com.bt.b2c.oa3cdc.contracts.BaseTestClass</baseClassForTests>
                </configuration>
                <dependencies>
                    <dependency>
                        <groupId>guru.springframework</groupId>
                        <artifactId>spring-cloud-contract-oa3</artifactId>
                        <version>2.1.2.0</version>
                    </dependency>
                </dependencies>
            </plugin>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

我有点怀疑的是,错误暗示使用了默认解析器(因此会中断)。在下面的日志中,我们不希望看到 OpenApiContractConverter 被使用吗?

    [DEBUG] Parsed rootNode: {"openapi":"3.0.1", ..... }
    [ERROR] Unexpected error in reading contract file
    [ERROR] Cannot compare java.util.ArrayList with value '[null, null]' and java.lang.Integer with value '0'
    [WARNING] Error Processing yaml file. Skipping Contract Generation 
    java.lang.IllegalStateException: Exception occurred while processing the file [E:\git\selfserve\oa3cdc\src\test\resources\contracts\incidents_openapi.yaml]
        at org.springframework.cloud.contract.verifier.converter.YamlToContracts.convertFrom(YamlToContracts.java:94)
        at org.springframework.cloud.contract.verifier.converter.YamlContractConverter.isAccepted(YamlContractConverter.java:63)
        at org.springframework.cloud.contract.verifier.file.ContractFileScanner.tryConvert(ContractFileScanner.java:320)
        at org.springframework.cloud.contract.verifier.file.ContractFileScanner.addContractToTestGeneration(ContractFileScanner.java:302)
        at org.springframework.cloud.contract.verifier.file.ContractFileScanner.appendRecursively(ContractFileScanner.java:268)
        at org.springframework.cloud.contract.verifier.file.ContractFileScanner.findContractsRecursively(ContractFileScanner.java:237)
        at org.springframework.cloud.contract.verifier.TestGenerator.generateTestClasses(TestGenerator.java:131)
        at org.springframework.cloud.contract.verifier.TestGenerator.generate(TestGenerator.java:111)
        at org.springframework.cloud.contract.maven.verifier.GenerateTestsMojo.execute(GenerateTestsMojo.java:300)

有任何想法吗?我怀疑我做了一些愚蠢的事情,但我没有看到

标签: openapispring-cloud-contract

解决方案


您正在使用版本 3.0.3 中的 Spring Cloud Contract 和版本 2.1.2.0 中与 SCC 3.0.3 不兼容的 openapi 插件。在分支的插件upgrade分支中,我已升级插件以与 SCC 3.0.x 兼容。要使用它,您应该按以下方式使用 jitpack.io

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-contract-maven-plugin</artifactId>
            <version>3.0.3</version>
            <extensions>true</extensions>
            <configuration>
                <testFramework>JUNIT5</testFramework>
                <baseClassForTests>com.bt.b2c.oa3cdc.contracts.BaseTestClass</baseClassForTests>
            </configuration>
            <dependencies>
                <!-- Until a Spring Cloud Contract 3.0.x compatible version gets released -->
                <dependency>
                    <groupId>com.github.marcingrzejszczak</groupId>
                    <artifactId>spring-cloud-contract-oa3</artifactId>
                    <version>upgrade-SNAPSHOT</version>
                </dependency>
            </dependencies>
        </plugin>           
    </plugins>
</build>

<pluginRepositories>
    <pluginRepository>
        <id>jitpack.io</id>
        <url>https://jitpack.io</url>
    </pluginRepository>
</pluginRepositories>

推荐阅读