繁体   English   中英

来自 gradle 插件(openapitools 生成器)的参考外部文件(openapi 规范)

[英]Reference external file (openapi spec) from gradle plugin (openapitools 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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM