Search code examples
spring-cloud-contract

ERROR: Stubs could not be found. Please make sure that spring-cloud-contract:convert was invoked


Using Spring Cloud Contract 2.1.3.RELEASE with spring-boot 2.1.1.RELEASE, I have added the dependency and plugin per explained in the guide:

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

and

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

I have also added under: $rootDir/src/test/resources/contracts:

Groovy file:

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"))
    }
}

And corresponding updateNodeV4_request.json and updateNodeV4_response.json (omitting their contents since these are large) valid JSON files.

When running mvn clean install I expected generated tests to be created (and fail for now) per the guide.

Instead I am getting the following error:

[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

Solution

  • I solved it by moving the plugin:

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

    From the root pom.xml to the specific module's pom.xml in which I have created the contracts in. Now it works as expected.