2017-09-01 54 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" 
    } 
} 
相關問題