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

Gradle生成多Swagger YAML时报inputSpec未配置错误如何解决?

问题修复方案

报错的核心原因是你依赖了OpenAPI Generator插件默认自带的openApiGenerate任务,该任务你未做任何配置,而你自己动态创建的openApiGenerate[接口名]系列任务没有被加入到构建依赖链中,因此执行构建时会触发默认任务的inputSpec未配置校验。

具体修复步骤

    1. 收集所有自定义生成任务,替换对默认任务的依赖
    1. 为每个自定义任务配置统一的输出目录,确保生成的代码能被sourceSet识别编译
    1. 可选:禁用默认的openApiGenerate任务避免误触发

修改后的完整配置代码

plugins {
    kotlin("jvm")
    id("org.openapi.generator")
}

sourceSets {
    main {
        java.srcDir("$buildDir/generate-resources/main/src/main/kotlin")
    }
}

dependencies {
    val jacksonVersion: String by project

    implementation(kotlin("stdlib"))
    testImplementation(kotlin("test-junit"))

    implementation("com.fasterxml.jackson.module:jackson-module-kotlin:$jacksonVersion")
    implementation("com.fasterxml.jackson.datatype:jackson-datatype-jsr310:$jacksonVersion")
}

val dir = File("$rootDir/transport/spec/")
val swaggerList = dir.walkTopDown().filter { it.name.endsWith(".yaml") }.map { it.name }.toList()
// 存储所有自定义生成任务
val customOpenApiTasks = mutableListOf<Task>()

swaggerList.forEach { swaggerItem ->
    val apiName = swaggerItem.replace(".yaml", "")
    val task = tasks.create(
        "openApiGenerate${apiName.capitalize()}",
        org.openapitools.generator.gradle.plugin.tasks.GenerateTask::class
    ) {
        val openapiGroup = "${rootProject.group}.openapi"
        generatorName.set("kotlin")
        packageName.set(openapiGroup)
        apiPackage.set("$openapiGroup.api")
        modelPackage.set("$openapiGroup.models")
        invokerPackage.set("$openapiGroup.invoker")
        inputSpec.set("$rootDir/transport/spec/$swaggerItem")
        // 配置输出目录和sourceSet对应
        outputDir.set("$buildDir/generate-resources/main")

        globalProperties.apply {
            put("models", "")
            put("modelDocs", "false")
        }

        configOptions.set(
            mapOf(
                "dateLibrary" to "string",
                "enumPropertyNaming" to "UPPERCASE",
                "serializationLibrary" to "jackson",
                "collectionType" to "list"
            )
        )
    }
    customOpenApiTasks.add(task)
}

tasks {
    // 禁用默认的openApiGenerate任务,避免误执行
    openApiGenerate {
        enabled = false
    }
    compileKotlin {
        // 依赖所有自定义的生成任务
        dependsOn(customOpenApiTasks)
    }
}

补充说明

  • 如果需要不同yaml生成的代码存放在不同目录避免冲突,可以给每个任务的outputDir配置独立路径,同时将所有路径都加入sourceSet的srcDir配置中。
  • 执行构建前可以先运行./gradlew tasks查看所有自定义生成任务是否已经正确注册。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 12:57:01