ОШИБКА: не удалось найти заглушки. Пожалуйста, убедитесь, что spring-cloud-contract:convert был вызван

Используя Spring Cloud Contract 2.1.3.RELEASE с spring-boot 2.1.1.RELEASE, я добавил зависимость и плагин, как описано в руководстве:

      <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-contract-verifier</artifactId>
        <version>${spring-cloud-contract.version}</version>
        <scope>test</scope>
      </dependency>

и

      <plugin>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-contract-maven-plugin</artifactId>
        <version>${spring-cloud-contract.version}</version>
        <extensions>true</extensions>
      </plugin>

Я также добавил под: $rootDir/src/test/resources/contracts:

Крутой файл:

package contracts

import org.springframework.cloud.contract.spec.Contract

Contract.make {
    name("contract_updateNodeV4")
    request {
        method 'PUT'
        url '/v4/nodes'
        headers {
            header 'Content-Type': 'application/vnd.org.springframework.cloud.contract.verifier.twitter-places-analyzer.v1+json'
        }
        body(file("updateNodeV4_request.json"))
    }
    response {
        status OK()
        body(file("updateNodeV4_response.json"))
    }
}

И соответствующие updateNodeV4_request.json и updateNodeV4_response.json (опуская их содержимое, так как они большие) действительные файлы JSON.

При запуске mvn clean install я ожидал, что сгенерированные тесты будут созданы (и пока не пройдут) в соответствии с руководством.

Вместо этого я получаю следующую ошибку:

[ERROR] Failed to execute goal org.springframework.cloud:spring-cloud-contract-maven-plugin:1.0.0.RELEASE:generateStubs (default-generateStubs) on project xxx: Stubs could not be found: [C:\Users\xxx\git\xxx\target\stubs] .
[ERROR] Please make sure that spring-cloud-contract:convert was invoked

person Nom1fan    schedule 10.11.2019    source источник


Ответы (2)


Скорее всего, ваши контакты находятся не в src/test/resources/contracts модуля, а в корневой папке модуля. Если это так, вам нужно сообщить плагину, что, увидев свойство плагина Contracts dir

person Marcin Grzejszczak    schedule 10.11.2019
comment
Боюсь, это не так. Контракты на самом деле находятся под модулем src/test/resources/contracts. Мой проект xxx и под ним у меня есть модуль xxx-web. Я создал папку contracts в папке ресурсов xxx-web. Любые другие варианты, которые могут вызвать эту проблему? - person Nom1fan; 11.11.2019
comment
Вам нужно будет загрузить свой образец куда-нибудь - person Marcin Grzejszczak; 11.11.2019
comment
Вы также можете проверить репозиторий образцов Spring Cloud Contract на Github, где у нас есть образцы maven и gradle. - person Marcin Grzejszczak; 11.11.2019
comment
Спасибо, я проверю. Я боюсь, что мой образец относится к корпоративному проекту, который я не могу просто загрузить. Больше всего я боюсь, что эту проблему вызывает какой-то конфликт зависимостей или несовместимость. Прежде всего, пожалуйста, подтвердите для меня, что Spring Cloud Contract 2.2.3.RELEASE с Spring-Boot 2.1.1.RELEASE совместим, просто потому, что я не совсем понял это из матрицы совместимости. - person Nom1fan; 11.11.2019
comment
Нет такой версии как 2.2.3. Релиз 2.2.0 будет выпущен через 2 недели. 2.1.x совместим с загрузкой 2.1. 2.2.x совместим с загрузкой 2.2 - person Marcin Grzejszczak; 11.11.2019
comment
Прошу прощения, правильная версия 2.1.3.RELEASE. Обновил опечатку в моем вопросе - person Nom1fan; 11.11.2019

Я решил это, переместив плагин:

 <plugin>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-contract-maven-plugin</artifactId>
        <version>${spring-cloud-contract.version}</version>
        <extensions>true</extensions>
 </plugin>

От корня pom.xml до конкретного модуля pom.xml, в котором я создал контракты. Теперь он работает, как и ожидалось.

person Nom1fan    schedule 11.11.2019