【问题标题】:Reference external file (openapi spec) from gradle plugin (openapitools generator)从 gradle 插件(openapitools 生成器)引用外部文件(openapi 规范)
【发布时间】:2019-10-25 19:41:15
【问题描述】:

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

鉴于 openapi 规范可用于生成服务器代码和客户端代码,因此将其单独发布并简单地拉入并由实现引用是完全合理的。

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

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

task generateFooCode(type: 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

【问题讨论】:

    标签: java gradle openapi openapi-generator


    【解决方案1】:

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

    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

    【讨论】:

    • 这太棒了!值得注意的是;最好使用 'openapi' 或 'schema' 进行配置,而不是 'api' - 因为 java-library 插件使用 'api' 来标记传递依赖项。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-24
    • 2022-10-13
    • 2021-10-15
    • 2019-06-19
    • 1970-01-01
    • 2022-11-24
    • 2018-03-02
    相关资源
    最近更新 更多