Estou usando o plugin Maven para gerar código Java. Após a geração, recebo erros ao compilar o código gerado, como:
package com.google.gson.annotations does not exist
package okio does not exist
Estou surpreso porque espero _Jersey cliente 1.18. Processamento JSON: Jackson 2.4.2_ a ser usado, conforme documentado no leia-me - por que preciso de GSON ou OKIO. Se eu fizer isso, não consigo encontrar quais dependências preciso adicionar para resolver esse problema - estou usando os exemplos na documentação do plug-in swagger-maven, mas a compilação ainda está falhando
2.2.1 - estava funcionando em 2.1.6
https://github.com/amadeus-travel-innovation-sandbox/sandbox-content/blob/master/swagger.yml
Configuração 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>
Dependências e propriedades
<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>
Clone e crie https://github.com/tadhgpearson/swagger-maven-plugin-dependencies
Estou usando Java 8 e Maven 3.3
Talvez # 3261?
O comportamento sugere que o padrão agora é usar GSON + OK HTTP - talvez seja aí que está o bug?
Aha - a pista está em JavaClientCodegen:56
que foi atualizada em # 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");
Se você quiser manter isso como o padrão (eu prefiro Jackson / Jersey, mas essa é apenas minha opinião), então os exemplos do maven codegen precisam ser atualizados, e a documentação deve me dizer como posso agora invocar o que costumava ser o opção padrão (isso é jersey1
?)
OK - consegui resolver isso olhando através do código e forneci a solicitação pull acima para atualizar a documentação. Espero que ajude!
Recentemente, atualizei do 2.1.6 para o 2.2.1, pois precisava do novo recurso "templateDirectory" que funciona no 2.2.1. mas assim que eu fiz isso, recebo os mesmos erros de complier. como você resolveu isso? ajuda!
existe uma maneira de ainda usar jersy e ignorar a nova biblioteca GSON padrão?
@aparnarus : use a opção jersey1
, conforme documentado no readme.
Obrigado! Eu não tenho certeza de como eu perdi - mas sim, funcionou.
@aparnarus : use a opção
jersey1
, conforme documentado no readme.
<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>
resolveu para mim
Muito Obrigado