Gradle中kaptGenerateStubsKotlin依赖openApiGenerate的配置问题
解决Kotlin项目中OpenAPI生成与QueryDSL的Gradle依赖问题
问题根源
- 新版Kotlin Gradle插件已将原
kaptGenerateStubsKotlin任务按源集拆分,默认main源集对应的任务是kaptGenerateStubsMainKotlin,直接引用旧任务名会提示找不到。 kapt生成QueryDSL Q类前需要先完成OpenAPI模型生成,否则会因找不到模型类触发隐式依赖错误。
完整Gradle配置方案(Groovy版)
1. 应用必要插件
确保项目引入所有所需插件:
plugins { id 'org.springframework.boot' version '3.2.0' id 'io.spring.dependency-management' version '1.1.4' id 'org.jetbrains.kotlin.jvm' version '1.9.20' id 'org.jetbrains.kotlin.kapt' version '1.9.20' id 'org.openapi.generator' version '7.2.0' id 'com.querydsl.jpa' version '5.0.0' }
2. 配置OpenAPI生成任务
指定生成规则,确保输出的模型类带JPA注解且符合Kotlin data class规范:
openApiGenerate { generatorName = "kotlin-spring" inputSpec = "$rootDir/src/main/resources/openapi/api-spec.yaml".toString() outputDir = "$buildDir/generated/sources/openapi/kotlin" apiPackage = "com.yourcompany.api" modelPackage = "com.yourcompany.model" configOptions = [ useSpringBoot3: "true", interfaceOnly: "false", dataClass: "true", generateJpaAnnotations: "true" ] } // 将生成的模型目录加入Kotlin源集,让kapt能扫描到 sourceSets { main { kotlin { srcDir "${openApiGenerate.outputDir}/main" } } }
3. 配置任务依赖关系
让kapt的stub生成任务等待OpenAPI生成完成:
// 绑定kapt stub生成任务与OpenAPI生成任务 tasks.named('kaptGenerateStubsMainKotlin') { dependsOn tasks.named('openApiGenerate') } // 确保编译任务依赖kapt stub生成(插件默认已处理,可显式声明增强可读性) tasks.named('compileKotlin') { dependsOn tasks.named('kaptGenerateStubsMainKotlin') }
4. 确认QueryDSL依赖
确保kapt能获取到QueryDSL的注解处理器:
dependencies { implementation 'com.querydsl:querydsl-jpa:5.0.0' kapt 'com.querydsl:querydsl-apt:5.0.0:jpa' // 其他Spring Boot、Kotlin依赖... }
Kotlin DSL版配置(build.gradle.kts)
如果使用Kotlin DSL,对应配置如下:
plugins { id("org.springframework.boot") version "3.2.0" id("io.spring.dependency-management") version "1.1.4" kotlin("jvm") version "1.9.20" kotlin("kapt") version "1.9.20" id("org.openapi.generator") version "7.2.0" id("com.querydsl.jpa") version "5.0.0" } openApiGenerate { generatorName.set("kotlin-spring") inputSpec.set("$rootDir/src/main/resources/openapi/api-spec.yaml") outputDir.set("$buildDir/generated/sources/openapi/kotlin") apiPackage.set("com.yourcompany.api") modelPackage.set("com.yourcompany.model") configOptions.set( mapOf( "useSpringBoot3" to "true", "interfaceOnly" to "false", "dataClass" to "true", "generateJpaAnnotations" to "true" ) ) } sourceSets { main { kotlin { srcDir("${openApiGenerate.outputDir.get()}/main") } } } tasks.named("kaptGenerateStubsMainKotlin") { dependsOn(tasks.named("openApiGenerate")) } tasks.named("compileKotlin") { dependsOn(tasks.named("kaptGenerateStubsMainKotlin")) } dependencies { implementation("com.querydsl:querydsl-jpa:5.0.0") kapt("com.querydsl:querydsl-apt:5.0.0:jpa") // 其他依赖... }
验证执行
运行gradle build时,任务执行顺序会自动调整为:openApiGenerate → kaptGenerateStubsMainKotlin → compileKotlin
生成的模型类会被kapt正确处理,生成QueryDSL所需的Q类,同时避免隐式依赖错误。
内容的提问来源于stack exchange,提问作者Mirza Prangon
相关产品推荐
相关产品推荐

