You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Cloud Contract generateClientStubs任务失败求助

问题:Spring Cloud Contract生产者端generateClientStubs任务执行失败

我正在搭建Spring Cloud Contract生产者端,已添加所需插件,合约文件放置在contracts目录中,构建时插件能正确识别该目录,Gradle构建过程也已将合约正确复制到stubs目录的contracts文件夹下,但执行generateClientStubs任务时出现以下错误:

控制台错误日志

> Task :[ProjectName]:generateClientStubs FAILED
Build cache key for task ':[ProjectName]:generateClientStubs' is 3cc52dc492987e9244ab97e5274ad851
Task ':[ProjectName]:generateClientStubs' is not up-to-date because:
  Task has failed previously.
Stubs output dir [/home/username/Projects/[ProjectName]/build/stubs/META-INF/[ProjectName]/[ProjectName]/2.4.9/mappings]
Spring Cloud Contract Verifier Plugin: Invoking DSL to client stubs conversion
Contracts dir is [/home/username/Projects/[ProjectName]/[ProjectName]/build/stubs/META-INF/[ProjectName]/[ProjectName]/2.4.9/contracts] output stubs dir is [/home/username/Projects/[ProjectName]/[ProjectName]/build/stubs/META-INF/[ProjectName]/[ProjectName]/2.4.9/mappings]
:[ProjectName]:generateClientStubs (Thread[Execution worker for ':' Thread 6,5,main]) completed. Took 0.003 secs.

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':common-services-service:generateClientStubs'.
> org.gradle.process.JavaExecSpec.getMainClass()Lorg/gradle/api/provider/Property;

Gradle配置文件(build.gradle)

plugins{
  id 'org.springframework.cloud.contract' version '3.1.6'
 }

dependencyManagement {
 imports {
    mavenBom "org.springframework.cloud:spring-cloud-dependencies:2021.0.5"
 }
 }
	ext {
set('springCloudVersion', "2021.0.6")
 }


dependencies {

implementation 'org.springframework.boot:spring-boot-starter-web'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'org.springframework.cloud:spring-cloud-starter-contract-verifier'

  }

tasks.named('contractTest') {
useJUnitPlatform()
 } 

tasks.named('test') {
useJUnitPlatform()
}


// tasks.create(type: Jar, name: 'verifierStubsJartest', dependsOn: 'generateClientStubs') {
//     baseName = project.name
//     classifier = contracts.stubsSuffix
//     from contractVerifier.stubsOutputDir
// }

contracts {
testMode = 'Explicit'
// contractsDslDir = file("/src/contractTest/resources/contracts")
// testFramework = "JUNIT5"
 // packageWithBaseClasses = 'com.example.SCCProducer'
   baseClassForTests='com.subex.ngp.sccBaseContractClass';
 generatedTestSourcesDir = project.file('src/generatedContract')

 // baseClassMappings {
 //     baseClassMapping(".*intoxication.*", "com.example.intoxication.contractBaseClass")
  //    }
 }

合约文件(TestingContact.groovy)

package contracts

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


Contract.make {
 request {
     method 'GET'
   url [url is correct and working ]

 }

response {
    status OK()
}
}

解决建议

1. 修复Gradle版本兼容性问题

报错org.gradle.process.JavaExecSpec.getMainClass()Lorg/gradle/api/provider/Property;是典型的Gradle版本与Spring Cloud Contract插件版本不兼容导致的:

  • Spring Cloud Contract 3.1.x系列要求Gradle 7.0及以上版本,如果你当前使用的是Gradle 6.x或更低版本,会出现该反射错误(因为JavaExecSpec.getMainClass()在Gradle 7.x才返回Property<String>,旧版本返回的是String类型)。
  • 检查你的Gradle版本(执行./gradlew --version),如果低于7.0,升级Gradle到7.x或更高版本。

2. 统一Spring Cloud版本配置

当前配置中dependencyManagement引入的Spring Cloud BOM版本是2021.0.5,但ext里又设置了springCloudVersion=2021.0.6,版本不一致可能引发潜在问题,建议统一为同一个版本:

dependencyManagement {
 imports {
    mavenBom "org.springframework.cloud:spring-cloud-dependencies:2021.0.6"
 }
 }
ext {
set('springCloudVersion', "2021.0.6")
 }

3. 验证合约文件语法

确保合约中的url配置语法正确,比如替换占位的[url is correct and working ]为实际有效的URL路径,示例:

url '/api/test'
// 或带参数的写法
url('/api/test') {
    queryParameters {
        param 'id', 123
    }
}

内容的提问来源于stack exchange,提问作者Gurushanth Gowdar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 00:25:00