Swagger-codegen: [Java] No se puede compilar el código generado por el complemento Maven

Creado en 30 nov. 2016  ·  7Comentarios  ·  Fuente: swagger-api/swagger-codegen

Descripción

Estoy usando el complemento Maven para generar código Java. Después de la generación, obtengo errores al compilar el código generado, como:

package com.google.gson.annotations does not exist
package okio does not exist

Estoy sorprendido porque espero _Jersey client 1.18. Procesamiento JSON: Jackson 2.4.2_ para ser utilizado, como se documenta en el archivo Léame - ¿Por qué necesito GSON u OKIO? Si lo hago, no puedo encontrar qué dependencias necesitaría agregar para resolver este problema; estoy usando los ejemplos en la documentación de swagger-maven-plugin, pero la compilación sigue fallando

Versión swagger-codegen

2.2.1 - estaba funcionando en 2.1.6

Contenido o URL del archivo de declaración Swagger

https://github.com/amadeus-travel-innovation-sandbox/sandbox-content/blob/master/swagger.yml

Línea de comando utilizada para la generación

Configuración de Codegen

                        <configuration>
                            <inputSpec>https://raw.githubusercontent.com/amadeus-travel-innovation-sandbox/sandbox-content/master/swagger.yml</inputSpec>
                            <language>java</language>
                            <configOptions>
                               <dateLibrary>joda</dateLibrary>
                            </configOptions>
                            <output>${project.build.directory}/generated-sources/swagger</output>
                        </configuration>

Dependencias y propiedades

<dependencies>
        <!-- dependencies are needed for the client being generated -->
        <dependency>
            <groupId>io.swagger</groupId>
            <artifactId>swagger-annotations</artifactId>
            <version>${swagger-annotations-version}</version>
        </dependency>

        <!-- HTTP client: jersey-client -->
        <dependency>
            <groupId>org.glassfish.jersey.core</groupId>
            <artifactId>jersey-client</artifactId>
            <version>${jersey-version}</version>
        </dependency>
        <dependency>
            <groupId>org.glassfish.jersey.media</groupId>
            <artifactId>jersey-media-multipart</artifactId>
            <version>${jersey-version}</version>
        </dependency>
        <dependency>
            <groupId>org.glassfish.jersey.media</groupId>
            <artifactId>jersey-media-json-jackson</artifactId>
            <version>2.22.1</version>
        </dependency>

        <!-- JSON processing: jackson -->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>${jackson-version}</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
            <version>${jackson-version}</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>${jackson-version}</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.datatype</groupId>
            <artifactId>jackson-datatype-joda</artifactId>
            <version>2.1.5</version>
        </dependency>
        <dependency>
            <groupId>joda-time</groupId>
            <artifactId>joda-time</artifactId>
            <version>${jodatime-version}</version>
        </dependency>

        <!-- Base64 encoding that works in both JVM and Android -->
        <dependency>
            <groupId>com.brsanthu</groupId>
            <artifactId>migbase64</artifactId>
            <version>2.2</version>
        </dependency>
        <!-- test dependencies -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>${junit-version}</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

        <swagger-annotations-version>1.5.0</swagger-annotations-version>
        <jersey-version>2.12</jersey-version>
        <jackson-version>2.4.2</jackson-version>
        <jodatime-version>2.3</jodatime-version>
        <maven-plugin-version>1.0.0</maven-plugin-version>
        <junit-version>4.8.1</junit-version>
    </properties>
pasos para reproducir

Clonar y construir https://github.com/tadhgpearson/swagger-maven-plugin-dependencies
Estoy usando Java 8 y Maven 3.3

Asuntos relacionados

¿Quizás # 3261?

Sugerir una solución

El comportamiento sugiere que el valor predeterminado ahora es usar GSON + OK HTTP, ¿tal vez ahí es donde está el error?

Question Swagger Codegen Maven Plugin

Todos 7 comentarios

Ajá, la pista está en JavaClientCodegen:56 que se actualizó en # 3919

CliOption libraryOption = new CliOption(CodegenConstants.LIBRARY, "library template (sub-template) to use"); libraryOption.setEnum(supportedLibraries); // set okhttp-gson as the default libraryOption.setDefault("okhttp-gson"); cliOptions.add(libraryOption); setLibrary("okhttp-gson");

Si desea mantener esto como predeterminado (prefiero Jackson / Jersey, pero esa es solo mi pequeña opinión), entonces los ejemplos de codegen maven deben actualizarse, y la documentación debería decirme cómo puedo invocar ahora lo que solía ser el opción predeterminada (¿es jersey1 ?)

De acuerdo, logré resolver esto revisando el código y proporcioné la solicitud de extracción anterior para actualizar la documentación. ¡Espero que ayude!

Recientemente actualicé de 2.1.6 a 2.2.1 porque necesitaba la nueva característica "templateDirectory" que funciona en 2.2.1. pero tan pronto como lo hice, obtengo los mismos errores de cumplimiento. ¿Como resolviste esto? ¡ayuda!

¿Hay alguna manera de seguir usando jersy e ignorar la nueva biblioteca GSON predeterminada?

@aparnarus : use el jersey1 , como se documenta en el archivo Léame.

¡Gracias! No estoy seguro de cómo me lo perdí, pero sí, funcionó.

@aparnarus : use el jersey1 , como se documenta en el archivo Léame.

<build> <plugins> <plugin> <groupId>io.swagger</groupId> <artifactId>swagger-codegen-maven-plugin</artifactId> <version>2.3.1</version> <executions> <execution> <goals> <goal>generate</goal> </goals> <configuration> <inputSpec>/src/main/resources/swagger.json</inputSpec> <language>java</language> <output></output> <apiPackage>it.eng.sil.scoop</apiPackage> <modelPackage>it.eng.sil.ws.scoop.client.model</modelPackage> <generateModels>true</generateModels> <generateApis>false</generateApis> <generateApiTests>false</generateApiTests> <generateApiDocumentation>false</generateApiDocumentation> <generateSupportingFiles>false</generateSupportingFiles> <generateModelDocumentation>false</generateModelDocumentation> **<library>jersey1</library>** <configOptions> <dateLibrary>java8</dateLibrary> <sourceFolder>src/main/java</sourceFolder> </configOptions> </configuration> </execution> </executions> </plugin> </plugins> </build>

me resolvió

muchas gracias

¿Fue útil esta página
0 / 5 - 0 calificaciones