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
2.2.1 - estaba funcionando en 2.1.6
https://github.com/amadeus-travel-innovation-sandbox/sandbox-content/blob/master/swagger.yml
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>
Clonar y construir https://github.com/tadhgpearson/swagger-maven-plugin-dependencies
Estoy usando Java 8 y Maven 3.3
¿Quizás # 3261?
El comportamiento sugiere que el valor predeterminado ahora es usar GSON + OK HTTP, ¿tal vez ahí es donde está el error?
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