java - 如何在项目目录中包含 swagger 生成的类

标签 java spring-boot maven swagger swagger-codegen

我正在尝试使用 Swagger Codegen 为我的 spring boot 项目生成模型类。我在网上找到了一些引用资料,并在我的 pom.xml 中包含了以下插件:

        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>

        <plugin>
            <groupId>org.openapitools</groupId>
            <artifactId>openapi-generator-maven-plugin</artifactId>
            <executions>
                <execution>
                    <goals>
                        <goal>generate</goal>
                    </goals>
                    <configuration>
                        <inputSpec>
                            ${project.basedir}/src/main/resources/Contract-v1.yml
                        </inputSpec>
                        <generatorName>spring</generatorName>
                        <apiPackage>${project.groupId}.swagger.api</apiPackage>
                        <modelPackage>${project.groupId}.swagger.model</modelPackage>
                        <supportingFilesToGenerate>
                            ApiUtil.java
                        </supportingFilesToGenerate>
                        <configOptions>
                            <sourceFolder>src/main/java/</sourceFolder>
                            <delegatePattern>true</delegatePattern>
                            <interfaceOnly>true</interfaceOnly>
                        </configOptions>
                    </configuration>
                </execution>
            </executions>
        </plugin>

我运行 mvn install类在目录 /target/generated-sources/openapi 中生成.但是我无法在我的 REST Controller 类中导入这些生成的类。

我的理解是 <modelPackage>字段用于标识必须放置生成的类的包。我对此是否正确?

即使这些生成的类在正确的包中,因为它们不在 src/main/java 中,我可能无法将它们导入其他类。

有没有办法在src/main/java下获取这些生成的类?目录或者我是否在 maven 配置中丢失了一些东西,因为这些文件对其他类不可用?

最佳答案

我也想实现您正在尝试的目标,虽然我一开始摸索着但最终还是弄明白了,我不需要做任何特别的事情。需要注意的是,我使用了 swagger-codegen-maven-plugin 而不是 openapi-generator-maven-plugin

这是我的配置在最新版本当天的样子 swagger-codegen-maven-plugin 版本 3.0.35。当我运行 mvn compile 时,我所有的类都在目标文件夹中生成,并且 src main java 被标记为源文件夹。通过引用生成的代码API,我可以直接在项目中直接实现自己的 Controller 。顺便说一句,swagger-codegen-maven-plugin 的文档不是最好的,我不得不看几个地方才有意义。添加一些引用

一般配置参数: https://github.com/swagger-api/swagger-codegen/tree/master/modules/swagger-codegen-maven-plugin

配置选项: https://github.com/swagger-api/swagger-codegen/issues/7795

<plugin>
        <groupId>io.swagger.codegen.v3</groupId>
        <artifactId>swagger-codegen-maven-plugin</artifactId>
        <version>3.0.35</version>
        <executions>
          <execution>
            <goals>
              <goal>generate</goal>
            </goals>
            <configuration>
              <inputSpec>${project.basedir}/api-docs/swagger.yaml</inputSpec>

              <generateApis>true</generateApis>
              <generateModels>true</generateModels>
              <generateSupportingFiles>false</generateSupportingFiles>
              <language>spring</language>

              <configOptions>

                <basePackage>com.company.project</basePackage>
                <apiPackage>com.company.project.api</apiPackage>
                <modelPackage>com.company.project.model</modelPackage>

                <interfaceOnly>true</interfaceOnly>
                <sourceFolder>src/main/java</sourceFolder>
                <hideGenerationTimestamp>true</hideGenerationTimestamp>
                <dateLibrary>java11</dateLibrary>
                <ignoreUnknownJacksonAnnotation>true</ignoreUnknownJacksonAnnotation>
                <notNullJacksonAnnotation>true</notNullJacksonAnnotation>
                <dateLibrary>false</dateLibrary>
                <useBeanValidation>true</useBeanValidation>
                <serializableModel>true</serializableModel>

              </configOptions>

            </configuration>
          </execution>
        </executions>
      </plugin>

关于java - 如何在项目目录中包含 swagger 生成的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64372072/

相关文章:

java - Java 中的 Thread.interrupt() 和 Thread.currentThread.interrupt() 有什么区别?

Java JNA-Jar应用程序在32位Windows系统中挂起

java - 将 OffsetDateTime 与 Spring Boot 和 MongoDB 一起使用会导致 MappingException

java - 在没有 spring security 的情况下,如何使用 spring boot + JPA 进行简单登录

java - Eclipse:如何检测项目是工作区的一部分

maven - maven-resources-plugin:2.5-无法创建资源输出目录

spring - ContextLoaderListener BeanCreationException : Error creating bean with name

java - 如何确保计时器任务在共享环境中为特定 JVM 运行。有什么办法吗?

java - 将 LazySeq 从 Clojure 返回到 Java 时出现 ClassCastException

java - 在 Spring Boot 上删除 "Using default security password"