【问题标题】:Generate stubs from contract repo by each consumer using gradle每个消费者使用 gradle 从合约 repo 生成存根
【发布时间】:2018-05-31 02:36:06
【问题描述】:

Spring 在 maven 中提供了一个示例,可以通过将 pom.xml 放在相应的目录中来为每个 procducer 服务生成存根。

Link to example

如何使用具有以下文件结构的 gradle 执行此操作,而我只想为 api1 构建存根?

src/
  main/
   resources/
     contracts/
       api1/
         consumer1/
           rest
         consumer2/
           rest
       api2/
         consumer1/
           rest

更新: 刚刚发现我可以在 @AutoConfigureStubRunner 中指定消费者名称,所以现在我只需要能够使用 gradle 基于每个 API 生成存根。

@AutoConfigureStubRunner(workOffline = true,
    ids = "com.example:beer-api-producer-with-stubs-per-consumer",
    stubsPerConsumer = true,
    consumerName = "bar-consumer")

【问题讨论】:

    标签: spring gradle build.gradle spring-cloud-contract


    【解决方案1】:

    您必须在 Gradle 中使用 jar 任务。 https://github.com/spring-cloud-samples/spring-cloud-contract-samples/blob/master/producer_with_restdocs/build.gradle这里有一个例子。

    修改路径就足够了,它应该可以工作。示例如下:

    task stubsJar(type: Jar) {
        into("/") {
            include('**/*.groovy')
            from("${project.rootDir}/src/main/resources/contracts")
        }
    }
    

    【讨论】:

    • 谢谢,它对我有用。我认为存根一开始应该有映射 json,所以我想我需要的只是从 stub-runner 开始的 groovy。
    • 您需要 groovy 来进行消息传递和生成存根。要将存根运行器用于 http,您需要 json 存根。我不知道你的要求是什么。
    • 这是外部合约 repo 场景,客户可以拉出合约 repo 并为他们用于集成测试的服务创建一个存根,直到生产者最终确定存根发布,然后客户可以重新指向它
    • 所以存根 jar 是必要的,但具有相应的生成存根。您必须在生产者的给定文件夹或整个事物上运行带有测试跳过的 gradle 构建,并设置插件以相应地处理合同。换句话说,将这个 github.com/spring-cloud-samples/spring-cloud-contract-samples/… 迁移到 gradle
    • 是的,这就是我想要做的 =(。你有任何关于迁移到 gradle 的提示吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-25
    • 1970-01-01
    • 1970-01-01
    • 2018-03-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多