Как передать пользовательский ContractConverter в образ докера весеннего облачного контракта - PullRequest
0 голосов
/ 10 ноября 2019

Я хочу использовать пользовательский 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-файлы зависимостей, а не исходный код. Это, вероятно, вызвано тем, что плагин не загружает исходный код до тех пор, пока он не создаст контракты, но это только теория.

Любой опыт работы с пользовательскими конвертерами контрактов будет очень полезен.

1 Ответ

1 голос
/ 10 ноября 2019

Вы должны создать свой собственный образ, используя этот файл в пути к классам. Ваш Groovy файл должен быть скомпилирован. Мы не читаем скрипты во время выполнения для получения дополнительных конвертеров

...