web-dev-qa-db-de.com

Swagger Codegen (mit Maven Plugin) für OpenAPI 3.0

Ich möchte Swagger Codegen für OpenAPI 3.0 YAML-Datei verwenden. Und ich sehe Swagger Codegen 3.0.0-rc ist verfügbar. Aber wenn ich versuche, das zu nutzen, stoße ich auf Probleme. Es folgen die Details:

Mein pom.xml Datei mit Swagger-Codegen Plugin:

<plugin>
  <groupId>io.swagger</groupId>
  <artifactId>swagger-codegen-maven-plugin</artifactId>
  <version>3.0.0-rc0</version>
  <executions>
    <execution>
      <goals>
        <goal>generate</goal>
      </goals>
      <configuration>
        <inputSpec>${basedir}/src/main/resources/mySpec.yaml</inputSpec>
        <output>target/generated-sources</output>
        <language>spring</language>
        <generateApis>false</generateApis>
        <modelPackage>com.kj.model</modelPackage>
        <apiPackage>com.kj</apiPackage>
        <configOptions>
          <sourceFolder>swagger</sourceFolder>
          <library>spring-mvc</library>
          <interfaceOnly>true</interfaceOnly>
          <useBeanValidation>true</useBeanValidation>
          <dateLibrary>Java8</dateLibrary>
          <Java8>true</Java8>
        </configOptions>
      </configuration>
    </execution>
  </executions>
</plugin>

Mit dem obigen Plugin, als ich den Maven Build ausführe, habe ich dieses ServiceConfigurationError erhalten, hier ist der Stack-Trace:

Exception in thread "main" Java.util.ServiceConfigurationError: io.swagger.codegen.CodegenConfig: Provider io.swagger.codegen.languages.Java.JavaClientCodegen not found
    at Java.util.ServiceLoader.fail(ServiceLoader.Java:239)
    at Java.util.ServiceLoader.access$300(ServiceLoader.Java:185)
    at Java.util.ServiceLoader$LazyIterator.nextService(ServiceLoader.Java:372)
    at Java.util.ServiceLoader$LazyIterator.next(ServiceLoader.Java:404)
    at Java.util.ServiceLoader$1.next(ServiceLoader.Java:480)
    at io.swagger.codegen.CodegenConfigLoader.forName(CodegenConfigLoader.Java:19)
    at io.swagger.codegen.config.CodegenConfigurator.toClientOptInput(CodegenConfigurator.Java:392)
    at io.swagger.codegen.plugin.CodeGenMojo.execute(CodeGenMojo.Java:512)
    at org.Apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.Java:134)

Um dies zu beheben, habe ich swagger-codegen-generators Abhängigkeit innerhalb des Maven Plugin Abschnitts der POM-Datei:

<dependencies>
  <dependency>
    <groupId>io.swagger</groupId>
    <artifactId>swagger-codegen-generators</artifactId>
    <version>1.0.0-SNAPSHOT</version>
  </dependency>
</dependencies>

Also mit diesem zuvor erwähnten Problem wurde behoben, aber jetzt sehe ich diese NPE

Java.lang.NullPointerException
    at io.swagger.codegen.languages.SpringCodegen.preprocessOpenAPI(SpringCodegen.Java:429)
    at io.swagger.codegen.DefaultGenerator.configureGeneratorProperties(DefaultGenerator.Java:199)
    at io.swagger.codegen.DefaultGenerator.generate(DefaultGenerator.Java:716)
    at io.swagger.codegen.plugin.CodeGenMojo.execute(CodeGenMojo.Java:534)
    at org.Apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.Java:134)
    at org.Apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.Java:208)
    at org.Apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.Java:154)
    at org.Apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.Java:146)
    at org.Apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.Java:117)

Wie du schon bemerkt hättest, benutze ich <language>spring</language> und <library>spring-mvc</library>. Bitte lassen Sie mich wissen, ob Codegen für jemanden mit diesen Konfigurationen für 3.0.0-rc0 funktioniert hat.

Anmerkung: Ich habe mir dieses alte post angesehen, das ähnlich ist, aber zu dieser Zeit 3.0.0-rc0 war nicht verfügbar.

12
Kuldeep Jain

Wenn Sie Swagger Codegen mit dem Maven-Plug-In für die OpenAPI 3.0.0-Spezifikation verwenden möchten, können Sie auch OpenAPI Generator verwenden (dies ist eine Community-gesteuerte Version von Swagger Codegen).

<dependency>
    <groupId>org.openapitools</groupId>
    <artifactId>openapi-generator-maven-plugin</artifactId>
    <version>3.3.4</version>
</dependency>

Ref: https://github.com/OpenAPITools/openapi-generator#12---artifacts-on-maven-central

(Bitte lesen Sie die Q & A warum wir Swagger Codegen gegabelt haben)

20
William Cheng

Das im April 2019 veröffentlichte v3 swagger codegen maven Plugin generiert funktionierende Java Client-Bibliotheken aus einer OpenAPI 3.0-Spezifikation. Ich verwende diese Maven pom.xml-Plugin-Konfiguration:

<plugin>
    <groupId>io.swagger.codegen.v3</groupId>
    <artifactId>swagger-codegen-maven-plugin</artifactId>
    <version>3.0.8</version>
    <executions>
    ..

Alle übrigen Einträge für configuration und configOptions sind gegenüber Version 2.4.5 unverändert. Ich musste die alte Annotation-Abhängigkeit durch die folgende ersetzen, damit der Client-Code kompiliert wurde:

    <dependency>
        <groupId>io.swagger.core.v3</groupId>
        <artifactId>swagger-annotations</artifactId>
        <version>2.0.8</version>
    </dependency>

HTH

3
chrisinmtown