如何将自定义合同转换器传递给 spring 云合同 docker 图片
How to pass custom ContractConverter to spring cloud contract docker image
我想使用自定义 ContractConverter 将自定义字段添加到我的合同中。
但是 spring 云合同插件不采用我创建的 CustomContractConverter class 来处理合同。
我在 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
docker 图像和 运行s
generateContractTests
根据合同创建测试的任务。
预期结果:
调用CustomContractConverter
时抛出异常。
实际结果:
由于默认的 YamlContracConverter class 无法解释合同中的自定义字段,该过程以异常结束。
到目前为止我发现了什么:
在 docker 容器中调试 spring 合约 gradle 插件(通过将 -Dorg.gradle.debug=true
参数添加到 docker-compose.yml命令字段)我看到应该加载 spring.factories 文件的 class SpringFactoriesLoader(Line: 132)
仅从定义为依赖项的 jars 中加载具有该名称的文件,而不是我在源代码中添加的文件.
这是通过 VisitableUrlClassLoader
完成的,它引用了依赖 jar 而不是源代码。
可以证明这是因为插件在创建合约后才加载源代码,但这只是一种理论。
任何使用自定义合约转换器的经验将不胜感激。
您必须使用类路径中的文件构建您自己的映像。您的 groovy 文件需要编译。我们不会在运行时读取脚本来检索额外的转换器
我想使用自定义 ContractConverter 将自定义字段添加到我的合同中。 但是 spring 云合同插件不采用我创建的 CustomContractConverter class 来处理合同。
我在 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
docker 图像和 运行s
generateContractTests
根据合同创建测试的任务。
预期结果:
调用CustomContractConverter
时抛出异常。
实际结果:
由于默认的 YamlContracConverter class 无法解释合同中的自定义字段,该过程以异常结束。
到目前为止我发现了什么:
在 docker 容器中调试 spring 合约 gradle 插件(通过将 -Dorg.gradle.debug=true
参数添加到 docker-compose.yml命令字段)我看到应该加载 spring.factories 文件的 class SpringFactoriesLoader(Line: 132)
仅从定义为依赖项的 jars 中加载具有该名称的文件,而不是我在源代码中添加的文件.
这是通过 VisitableUrlClassLoader
完成的,它引用了依赖 jar 而不是源代码。
可以证明这是因为插件在创建合约后才加载源代码,但这只是一种理论。
任何使用自定义合约转换器的经验将不胜感激。
您必须使用类路径中的文件构建您自己的映像。您的 groovy 文件需要编译。我们不会在运行时读取脚本来检索额外的转换器