2017-09-01 29 views
1

我是Spring-Cloud-contract的新手。试图配置我的版本,我得到错误。Spring Cloud Contract中生成的测试失败

这里是我的项目结构

项目
| ==>模块

我有类路径在我的项目的build.gradle

项目生成文件

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 
} 

模块装配文件中的以下相关

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

我有一个时髦的fi le有一个post请求和一个响应。当我做gradle build时,测试是自动生成的,但我的构建感觉。

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()); 
     ^

我做错了什么?在我使用的版本中是否有任何不匹配?

+0

很有可能您的版本不匹配。请查看此回购https://github.com/spring-cloud-samples/spring-cloud-contract-samples/blob/master/producer/build.gradle与春季云合同样本,并更新您的项目看起来相同 –

+0

我正在将Spring云合同应用于现有项目。看起来项目已经在其依赖项中引导了spring。我将尝试查看依赖关系树来找出冲突。 – vkrams

+0

@MarcinGrzejszczak我的项目使用'springBootversion = 1.4.3.RELEASE',不能更改或升级它。哪个'spring-cloud-contract-gradle-plugin'与这个版本兼容?另外我使用'spring-cloud-dependencies:Camden.SR7'这是否?感谢您的帮助 – vkrams

回答

0

@Marcin感谢您的意见。这就是我解决这个问题的方法。

构建在生成的测试中失败,jayway jsonpath在错误位置处没有以红色显示。当我按Ctrl + Hover(鼠标)导入时,它引用com.jayway.jsonpath:json-path:2.2.0,这是不正确的。原因是因为我在Intellij中导入了很多模块,显然其中一个模块也导入2.2.0,intellij从外部库引用它。

因此,我做了无效缓存intellij并关闭了所有不必要的项目,并在新窗口(新会话)中重新单独打开了我正在处理的项目。现在gradle build,并再次在生成的测试中得到相同的错误。但是这次当我按Ctrl + Hover(鼠标)导入时,它指的是我期待的com.jayway.jsonpath:json-path:0.9.1

现在为了解决这个问题,我使用下面的命令检查了依赖关系树,并对它做了一些grep

​​

我找到了答案,为什么gradle这个与0.9.1更换2.2.0。我发现一些项目依赖项正在取代它。现在解决方案是修改jayway json-path的模块构建文件,如下所示。之后,我已经给出build gradle命令,现在错误消失了。

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

最后,我有例外,说SpringCloudContractAssertions找不到。

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

所以我代替Camden释放与Dalston,如下图所示。现在一切正常。

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