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

是否可以为生成的openApi规范文件设置特定的包名称

孟健
2023-03-14

在我们的项目(java/spring/gradle stack)中,我们使用的是openApi规范。我们为他们提供了一些服务和规格。此外,我们在每个规范中都有重复的公共模块。我们将这些公共模块移动到一个单独的规范文件中,并将其包含在其他规范中。例如:

specific_project1:
   openapi:
      spec.yaml
      common_modules.yaml
   build.gradle

规范yaml有下一个代码:

openapi: 3.0.0
info:
  version: 0.0.1
paths:
  /specific/post:
    post:
      requestBody:
        context:
          application/json:
             schema:
               $ref: "common_modules.yaml#/components/schemas/TestModule"

和公共_模块。yaml下一个:

openapi: 3.0.0
info:
  version: 0.0.1
components:
  schemas:
    TestModule:
      type: object
      properties:
        value:
          type: string

因此,我们需要用包名com生成spec.yaml。具体的项目1,通用_模块。yaml是用包名com生成的。常见的模块和从spec.yaml生成的java类具有对带有包的TestModule的导入。常见的导入中的模块。


共有2个答案

堵雅健
2023-03-14

我们找到了如何引用同一个对象的解决方案。我们将TestModule作为一个单独的项目发布,它有自己的包,在其他项目中,我们使用importMappings配置来定义对象的正确包名。

importMappings = [
   TestModule: "com.common.modules.TestModule"
]
宗政博
2023-03-14

是的,这是可能的

当您添加openapi插件进行构建时。等级式

plugins { 
 
       id "org.openapi.generator" version "4.3.0"
}

您可以访问openApiGenerate任务,

可以这样修改,例如:

openApiGenerate {
    generatorName = "jaxrs-jersey"
    inputSpec = "$rootDir/spec-v1.yaml".toString()
    outputDir = "$rootDir/".toString()
    apiPackage = "name.of.api.package.rest.server.v1.api"
    invokerPackage = "name.of.api.package.rest.server.v1.invoker"
    modelPackage = "name.of.api.package.rest.server.v1.model"
    configOptions = [
        library: "jersey2"
    ]
}

这里是所有可能的修改,你可以做相关的Spring链接,例如https://github.com/OpenAPITools/openapi-generator/blob/master/docs/generators/spring.md

对于发电机的完整列表:https://github.com/OpenAPITools/openapi-generator/tree/master/docs/generators

为了在一个项目中使用2个yaml文件,您必须做以下工作。

task common(type: org.openapitools.generator.gradle.plugin.tasks.GenerateTask){
generatorName = "spring"
inputSpec = "$rootDir//schema/common.yaml".toString()
outputDir = "$rootDir/generated".toString()
apiPackage = "com.abc.code.generated.controller"
modelPackage = "com.abc.code.generated.model"
configOptions = [
        dateLibrary: "java8"
]
systemProperties = [
    invoker : "false", 
    generateSupportingFiles: "true"
]
additionalProperties = [
    interfaceOnly : "true",
]

您可以为spec.yaml保留openApiGenerate,但请确保添加

compileJava.dependsOn common , tasks.openApiGenerate 

所以你要同时执行这两个命令。希望我能帮上忙。

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

  • 我正在尝试在我的Android项目上启用proguard代码混淆。这些年来,我看到了很多问题,但很多线索都是相当古老的,很难说出它们对我有多大的相关性。 2编辑项目。属性,取消注释 proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt 3由于pro Guard-Project.txt不

  • 问题内容: 这是我的代码示例: 是否可以使用我的paxkage(bio)中的函数而无需指定包名称: ? 问题答案: 您可以将其用作导入声明,例如: 如果出现显式的句号()而不是名称,则在该软件包的package块中声明的所有软件包导出的标识符都将在导入源文件的file块中声明,并且 必须在不使用限定符的情况下进行访问 。 这就是像govey这样的测试框架所做的: 您不需要使用,或者由于导入以’开头

  • 当记录一个会话与wiremock独立,我得到的映射文件生成其中包括一个链接到身体与相同的鉴别器。 是否有一种方法可以控制(种子)鉴别器的命名,以便我可以让录制在每个录制会话上生成相同的存根名称? 这会让我的git历史不那么混乱!

  • 我正在从swagger(Open API 2)转向springdoc(Open API 3),但今天在某些情况下,我使用swagger-codemen-maven-plugin从yaml生成代码(用于客户端和提供商),遵循合同优先策略。下面是配置示例: 使用springdoc openapi maven插件生成代码有没有等效的选项?

  • 我试图针对H2数据库运行jOOQ代码生成器,但遇到以下异常: 我已经核实了数据库确实存在。我怀疑这是由于区分大小写处理不匹配造成的: jOOQ引用所有模式对象的名称,作为指定case instivity的一种方法。。。但是, H2使用引号强制区分大小写 我知道如何以编程方式指定渲染设置来使用生成的工件(构建查询等),但在这种情况下,我正在寻找一种方法来指定代码生成器配置中的这些设置。 提前谢谢!