我的OpenAPI Generator Gradle配置异常,请求协助排查
解决多模块Gradle项目中OpenAPI Generator未解析引用问题
问题背景
搭建多模块Gradle项目,根目录和api模块配置如下,但执行代码生成时出现Unresolved reference错误,无法识别openApiGenerate及其配置属性。
根目录build.gradle.kts配置
plugins { java kotlin("jvm") version "1.8.10" apply false id("org.openapi.generator") version "7.2.0" apply false } subprojects { apply(plugin = "org.jetbrains.kotlin.jvm") repositories { mavenCentral() mavenLocal() } dependencies { implementation(kotlin("stdlib-jdk8")) } }
api模块build.gradle.kts原配置
apply(plugin = "org.openapi.generator") openApiGenerate { generatorName.set("kotlin") inputSpec.set("src/main/swagger/api.yml") outputDir.set("src/main/kotlin") apiPackage.set("com.example.api") modelPackage.set("com.example.model") invokerPackage.set("com.example.invoker") typeMappings.set( mapOf( "dateLibrary" to "java8" ) ) }
错误信息
> Configure project :api e: /Users/johnkramer/source/other/openapi-example/api/build.gradle.kts:3:1: Unresolved reference: openApiGenerate e: /Users/johnkramer/source/other/openapi-example/api/build.gradle.kts:4:5: Unresolved reference: generatorName e: /Users/johnkramer/source/other/openapi-example/api/build.gradle.kts:5:5: Unresolved reference: inputSpec e: /Users/johnkramer/source/other/openapi-example/api/build.gradle.kts:6:5: Unresolved reference: outputDir e: /Users/johnkramer/source/other/openapi-example/api/build.gradle.kts:7:5: Unresolved reference: apiPackage e: /Users/johnkramer/source/other/openapi-example/api/build.gradle.kts:8:5: Unresolved reference: modelPackage e: /Users/johnkramer/source/other/openapi-example/api/build.gradle.kts:9:5: Unresolved reference: invokerPackage e: /Users/johnkramer/source/other/openapi-example/api/build.gradle.kts:10:5: Unresolved reference: typeMappings
解决方案
问题源于Kotlin DSL的类型安全要求,直接使用openApiGenerate闭包无法让Gradle识别任务属性,需通过类型安全方式配置任务:
修改api模块build.gradle.kts(带类型导入)
apply(plugin = "org.openapi.generator") // 导入任务类型,获得IDE自动补全支持 import org.openapitools.generator.gradle.plugin.tasks.GenerateTask tasks.named<GenerateTask>("openApiGenerate") { generatorName.set("kotlin") // 使用file()确保路径解析准确 inputSpec.set(file("src/main/swagger/api.yml").absolutePath) outputDir.set(file("src/main/kotlin").absolutePath) apiPackage.set("com.example.api") modelPackage.set("com.example.model") invokerPackage.set("com.example.invoker") typeMappings.set( mapOf( "dateLibrary" to "java8" ) ) }
简化版本(无需类型导入)
若不需要IDE自动补全,也可直接通过tasks.openApiGenerate配置:
apply(plugin = "org.openapi.generator") tasks.openApiGenerate { generatorName.set("kotlin") inputSpec.set("src/main/swagger/api.yml") outputDir.set("src/main/kotlin") apiPackage.set("com.example.api") modelPackage.set("com.example.model") invokerPackage.set("com.example.invoker") typeMappings.set( mapOf( "dateLibrary" to "java8" ) ) }
额外检查点
- 确认根目录中
org.openapi.generator插件版本与子模块应用的版本一致。 - 验证
src/main/swagger/api.yml文件路径正确,文件格式合法。 - 手动执行生成命令:
./gradlew :api:openApiGenerate,查看是否有其他报错。
内容的提问来源于stack exchange,提问作者Kramer
相关产品推荐
相关产品推荐

