尝试将 swagger-codegen 包含在 gradle kotlindsl 中

Cle*_*mzd 3 gradle kotlin swagger openapi

我正在尝试swagger codegen在使用 gradle (kotlin) 构建的项目中工作。

我的参考是这里的示例: https: //github.com/int128/gradle-swagger-generator-plugin,它是在Gradle groovy版本中制作的。

现在情况build.gradle.kts如下:

repositories {
    jcenter()
}

plugins {
    java
    id("org.springframework.boot") version "2.1.2.RELEASE"
    id("io.spring.dependency-management") version "1.0.6.RELEASE"
    id("org.hidetake.swagger.generator") version "2.16.0"
}

dependencies {
    implementation("org.springframework.boot:spring-boot-starter-web")
    implementation ("io.swagger:swagger-annotations:1.5.21")
    swaggerCodeGen("io.swagger:swagger-codegen-cli:2.3.1")

    // Use JUnit test framework
    testImplementation ("junit:junit:4.12")
}

swaggerSources {
    petstore {
        inputFile = file('petstore.yaml')
        code {
            language = 'spring'
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但 IntelliJ 不喜欢谈论 swagger 的台词:

智能错误

我是 gradle 的新手,所以我不明白我应该做什么。swaggerCodeGen 应该是一个函数吗?这个函数应该在哪里导入?swaggerSources应该从哪里进口?

小智 5

import org.hidetake.gradle.swagger.generator.GenerateSwaggerCode

// plugins, repositories are same, but note import above ^^^

dependencies {
    implementation("org.springframework.boot:spring-boot-starter-web")
    implementation ("io.swagger:swagger-annotations:1.5.21")
    "swaggerCodegen"("io.swagger:swagger-codegen-cli:2.3.1") // 1

    // Use JUnit test framework
    testImplementation ("junit:junit:4.12")
}

swaggerSources {
    create("petstore").apply { // 2
        setInputFile(file("petstore.yaml")) // 3
        code(closureOf<GenerateSwaggerCode> { // 4
            language = "spring"
        })
    }
}
Run Code Online (Sandbox Code Playgroud)

1 - Kotlin 中的动态解析配置如下所示(从 Groovy 动态解析,因此在编译时使用它会出现问题,String 上的扩展调用运算符是我们的救世主);

2 -swaggerSources返回您NamedDomainObjectContainer<SwaggerSource>,因此为了添加新容器,我们使用create它的名称作为参数来调用;

3 - Kotlin不像Groovy那么灵活,因此调用setter而不是设置字段;

4 - Groovy 的闭包与函数式接口相去甚远,因此我们指定通用类型,因为插件的源代码Closure未参数化。