当前位置: 首页 > 知识库问答 >
问题:

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

鄂曦之
2023-03-14

我试图建立一个应用程序,引用一个openapi规范,这是已经发表在ArtFactory。这意味着我将把foo.yaml作为一个依赖项,但我似乎不知道如何通过openapitools生成器插件实际引用该文件。

鉴于openapi规范可用于生成服务器代码和客户机代码,因此将其单独发布并简单地拉入实现并由实现引用是非常有意义的。

通用域名格式。公司巴-1.0。10含有foo。yaml位于罐子的顶部。

我已经在构建的顶层添加了依赖项。格拉德尔。kts文件,我还将其添加为插件任务本身的一部分。

org.openapitools.generator.gradle.plugin.tasks.生成任务

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'
    }
}

}

我得到的结果:*出了什么问题:任务“:GenerateFocode”的执行失败。

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

共有1个答案

班高明
2023-03-14

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

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生成器gradle插件和“jaxrs resteasy”生成器,我想知道是否有办法更改输出文件的名称。现在它正在生产ApiApi。java,ApiService。java,ApiException。java等。 有没有办法配置它,这样输出将是MyNameApi.java和MyNameApiService.java? 示例YAML:

  • 我正在使用openapi生成器Gradle插件从openapi模式生成模型文件。在构建中使用这些设置。gradle脚本一切似乎都正常: } 结果类在正确的包中生成: 问题就在这里——我不需要它们在我的源代码中,我只需要它们在编译阶段。我希望它们在构建目录中生成,以将它们与其他逻辑分开。但是,当我将outport-dir更改为"$build dDir/生成". toString()时,会发生这种情况

  • 这些插件提供的各种运行时的技术的集成. Table 22.3. Integration plugins Plugin Id 自动应用 协同工作 描述 application java, distribution - 增加了对运行绑定Java项目作为命令行应用的任务. ear - java 增加了对构建J2EE应用程序的支持. jetty war - 在构建中嵌入Jetty web容器可以部署web

  • 我试图从我们需要实现的一个招摇过市的文件中生成接口。它是从外部来源提供的。我通常先使用契约,但在java/kotlin中很长一段时间没有这样做。 我已经建立了一个项目,希望尽可能多地控制我的代码。我尝试使用

  • 不幸的是,SpringFox还不支持OpenAPI3,而且,当我只想将最初的yaml公开为JSON时,使用基于反射的生成器似乎毫无意义。

  • 对于来说,肯定有某种方法可以产生这个输出,不是吗?我发现有一些将映射到,所以似乎有一种方法可以让它产生类型,但我没有找到