#openapi #spring-cloud-contract
Вопрос:
У меня возникает очень похожая проблема с некоторыми другими, которые пытаются использовать плагин spring-cloud-contract-oa3 и контракты в спецификации openapi YAML.
Я использую maven с 2.1.2.0 плагина и 3.0.3 SCC —
<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:gitselfserveoa3cdcsrctestresourcescontractsincidents_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)
Есть какие-нибудь идеи? Я подозреваю, что сделал что-то глупое, но я этого не вижу
Ответ №1:
Вы используете контракт Spring Cloud в версии 3.0.3 и плагин openapi в версии 2.1.2.0, несовместимый с SCC 3.0.3. В моей ветке плагина в 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>
Комментарии:
1. Марчин, спасибо за информацию. Что сказал, Я не могу получить, чтобы работать, и Maven жалуется с: «не удалось передать артефакт ком.в GitHub.marcingrzejszczak:весна-облако-договор-оа3:пом:весна-облако-договор-3.0.X с/с jitpack.Ио ( jitpack.Ио ): перевод не jitpack.Ио/ком/гитхаб/marcingrzejszczak/… »
2. Пожалуйста, попробуйте еще раз — я могу получить доступ к этому файлу jitpack.io/com/github/marcingrzejszczak/…
3. Привет, да, я могу вытащить файл POM сейчас (некоторые прокси выдают мой конец), но теперь я получаю жалобу после этого на банку :
Caused by: org.eclipse.aether.transfer.ArtifactNotFoundException: Could not find artifact com.github.marcingrzejszczak:spring-cloud-contract-oa3:jar:spring-cloud-contract-3.0.x in jitpack.io (https://jitpack.io)
4. Хорошо, я обновил ответ. Очевидно, вы не можете использовать мой тег — вам придется использовать ветку. Поэтому установите версию в
upgrade-SNAPSHOT
. jitpack.io/#marcingrzejszczak/spring-cloud-contract-oa3/…5. Взглянув на это еще раз, я действительно вижу, что конвертер OpenAPI найден на заводе spring и находится в списке из 3 возможных конвертеров. Отладка maven, хотя кажется, что при попытке с помощью этого.tryConvert(конвертер,файл) вызывает исключение IllegalStateException. Я попробую с другим примером файла oa3 yaml