从gradle插件(openapitools生成器)引用外部文件(openapi规范)

时间:2019-10-25 19:41:15

标签: gradle openapi openapi-generator

我正在尝试构建一个引用已在工件中发布的openapi规范的应用程序。这意味着我将把foo.yaml作为依赖项拉入,但是我似乎无法弄清楚如何通过openapitools生成器插件实际引用该文件。

鉴于openapi规范可用于生成服务器代码和客户端代码,因此完全分开发布它们并简单地将其引入并由实现引用是十分有意义的。

com.company.bar-1.0.10在jar的顶层包含foo.yaml。

我已经在build.gradle.kts文件的顶级添加了依赖项,并且还将其作为插件任务本身的一部分添加了。

任务generateFooCode(类型:org.openapitools.generator.gradle.plugin.tasks.GenerateTask){

generatorName = "java"
apiPackage = 'com.ehi.gbo.openapiconnect.api.foo'
modelPackage = 'com.ehi.gbo.openapiconnect.model.foo'
invokerPackage = 'com.ehi.gbo.openapiconnect.common.invoker'
inputSpec = "foo.yaml".toString()
outputDir = "$buildDir/generated-sources/foo".toString()
configOptions = [
        dateLibrary          : "java8",
        useTags              : true,
        interfaceOnly        : true,
        delegatePattern      : false,
        useBeanValidation    : false,
        performBeanValidation: false,
        useOptional          : false,
        serviceImplementation: false,
        serviceInterface     : false,
        java8                : false,
        serializableModel    : true,
        skipDefaultInterface : true,
        reactive             : false,
]
configurations {
    dependencies {
        implementation 'com.company.bar:foo-api:1.0.10'
    }
}

}

我得到的结果是: * 什么地方出了错: 任务':generateFooCode'的执行失败。

  

规范存在问题。可以通过validateSpec(Maven / Gradle)或--skip-validate-spec(CLI)禁用该选项。      |错误计数:1,警告计数:0     错误:           -无法读取位置foo.yaml

1 个答案:

答案 0 :(得分:0)

经过大量的搜索,我遇到了一个非常优雅的解决方案。

configurations {
    api
}
  dependencies {
    api 'somegroup:someArtifact:someVersion'
}
  task extractApi(type: Sync) {
    dependsOn configurations.api

    from { // use of closure defers evaluation until execution time
        configurations.api.collect { zipTree(it) }
    }
    into "$buildDir/api/"
}

然后我可以将inputSpec引用为$ buildDir / api / spec.yaml