Я хочу использовать пользовательский ContractConverter для добавления настраиваемых полей в мои контракты. Но плагин весеннего облачного контракта не использует класс CustomContractConverter, который я создал для обработки контрактов.
Я создал демонстрационный проект в github, чтобы продемонстрировать это: https://github.com/javiersvg/custom-contracts
Структура кода:
- src
- test
- resource
- contracts
- helath.yml -> A contract with a custom field.
- META-INF
- spring.factories -> Custom contract converter configuration
- groovy/com/.../
- CustomContractConverter.groovy -> Custom contract converter
Как запустить:
Существует файл docker-compose.yml, который копирует содержимое этих папок в образ докера springcloud/spring-cloud-contract:2.2.0.BUILD-SNAPSHOT
и запускает задачу generateContractTests
всоздать тесты на основе контрактов.
Ожидаемый результат:
Исключение выдается при вызове CustomContractConverter
.
Фактический результат:
Процесс завершается с исключением из-за того, что класс YamlContracConverter по умолчанию не может интерпретировать пользовательское поле в контракте.
То, что я обнаружил до сих пор:
Отладка подключаемого модуля пружинного контракта в GradleКонтейнер Docker (добавив параметр -Dorg.gradle.debug=true
в поле команды docker-compose.yml) Я вижу, что класс SpringFactoriesLoader(Line: 132)
, который должен загрузить файл spring.factoriesФайл загружает только файлы с таким именем из jar-файлов, определенных как зависимости, а не тот, который я добавил в исходный код. Это делается через VisitableUrlClassLoader
, в котором есть ссылка на jar-файлы зависимостей, а не исходный код. Это, вероятно, вызвано тем, что плагин не загружает исходный код до тех пор, пока он не создаст контракты, но это только теория.
Любой опыт работы с пользовательскими конвертерами контрактов будет очень полезен.