2017-09-01 5 views
1

Je suis nouveau au contrat printemps-nuage. Juste essayer de configurer ma construction et je reçois une erreur.Les tests générés échouent dans Spring Cloud Contract

Voici ma structure de projet

Projet
| ==> Module

Je les dépendances suivantes pour classpath dans mon projet build.gradle

Projet fichier de construction

buildscript { 
dependencies { 
    classpath "org.sonarsource.scanner.gradle:sonarqube-gradle-plugin:2.2.1" 
    classpath("org.springframework.boot:spring-boot-gradle-plugin:1.5.4.RELEASE") 
    classpath "org.springframework.cloud:spring-cloud-contract-gradle-plugin:1.1.3.RELEASE" 
} 
apply from: "$projectDir/gradle/app/springcloud.gradle" //Gradle build file in module 
} 

Module Build fichier

apply plugin: 'groovy' 
apply plugin: 'spring-cloud-contract' 
apply plugin: 'org.springframework.boot' 
dependencies { 
//Spring cloud contract dependencies 
compile('org.springframework.boot:spring-boot-starter-actuator') 
compile('org.springframework.boot:spring-boot-starter-web') 
testCompile('org.springframework.boot:spring-boot-starter-test') 
testCompile('org.springframework.cloud:spring-cloud-starter-contract-verifier') 
testCompile "org.springframework.cloud:spring-cloud-starter-contract-stub-runner" 
testCompile "com.jayway.restassured:rest-assured:2.5.0" 
testCompile "com.jayway.restassured:spring-mock-mvc:2.5.0" 
} 
    //Spring cloud contract dependency management 
dependencyManagement { 
imports { 
    mavenBom "org.springframework.cloud:spring-cloud-dependencies:Dalston.RELEASE" 
    } 
} 

J'ai un fi groovy le qui a une demande de poste et une réponse. Quand je fais gradle build, les tests sont générés automatiquement mais mon build se sent.

C:\Users\user\Projects\myProject\module\build\generated-test-sources\contracts\org\springframework\cloud\contract\verifier\tests\ContractVerifierTest.java:3: error: cannot find symbol 
import com.jayway.jsonpath.DocumentContext; 
        ^
symbol: class DocumentContext 
location: package com.jayway.jsonpath 

C:\Users\user\Projects\myProject\module\build\generated-test-sources\contracts\org\springframework\cloud\contract\verifier\tests\ContractVerifierTest.java:28: error: cannot find symbol 
     DocumentContext parsedJson = 
JsonPath.parse(response.getBody().asString()); 
     ^

Est-ce que je fais quelque chose de mal? Y a-t-il un décalage dans les versions que j'utilise?

+0

Vous avez probablement une incompatibilité de version. S'il vous plaît consulter ce repo https://github.com/spring-cloud-samples/spring-cloud-contract-samples/blob/master/producer/build.gradle avec des exemples de contrat de printemps nuage et mettre à jour votre projet pour se ressembler –

+0

J'applique un contrat de nuage de printemps au projet existant. On dirait que le projet a déjà démarré au printemps dans sa dépendance. Je vais essayer de regarder dans l'arbre de dépendance pour comprendre les conflits. – vkrams

+0

@MarcinGrzejszczak mon projet utilisé 'springBootversion = 1.4.3.RELEASE', ne peut pas changer ou mettre à jour. Quel 'spring-cloud-contract-gradle-plugin' est compatible avec cette version? J'utilise aussi 'spring-cloud-dependencies: Camden.SR7' Est-ce que c'est ça? Merci pour votre aide – vkrams

Répondre

0

@Marcin Merci pour vos commentaires. C'est comme ça que j'ai résolu ce problème.

La construction échoue à l'intérieur des tests générés et jayway jayway n'apparaît pas en rouge à la position d'erreur. Lorsque je Ctrl + Hover (souris) sur l'importation, il fait référence à com.jayway.jsonpath:json-path:2.2.0 ce qui n'est pas vrai. La raison en est que j'ai importé de nombreux modules dans Intellij et apparemment l'un des modules importe également 2.2.0 et intellij le fait référence depuis une bibliothèque externe.

J'ai donc invalidé cache intellij et fermé tous les projets inutiles et rouvert le projet seul sur lequel je travaille, dans une nouvelle fenêtre (session Fresh). Maintenant gradle build et encore j'ai eu la même erreur sur les tests générés. Mais cette fois, quand je Ctrl + Hover (souris) sur l'importation de son renvoi à la com.jayway.jsonpath:json-path:0.9.1 qui est ce que je m'attends.

Maintenant, pour résoudre ce problème, j'ai examiné l'arbre de dépendance en utilisant la commande ci-dessous et j'ai fait grep dessus.

allDeps --configuration testRuntime

Je trouve la réponse, pourquoi gradle remplace 2.2.0 avec 0.9.1. J'ai compris que certaines dépendances de projets le remplacent. Maintenant, la solution pour cela est de modifier mon fichier de construction de module pour jayway json-path comme indiqué ci-dessous. Après que j'ai donné la commande build gradle et maintenant les erreurs sont allées.

testCompile ('com.jayway.jsonpath:json-path:2.2.0') { 
      force = true 
} 

Et enfin, j'ai exception en disant que SpringCloudContractAssertions incapable de trouver.

org.springframework.cloud.contract.verifier.assertion.SpringCloudContractAssertions.assertThat;

Je remplace Camden version avec Dalston comme indiqué ci-dessous. Maintenant, tout fonctionne bien.

dependencyManagement { 
    imports { 
     mavenBom "org.springframework.cloud:spring-cloud-dependencies:Dalston.RELEASE" 
    } 
}