Swagger-codegen: [Java] Não é possível construir o código gerado pelo plugin Maven

Criado em 30 nov. 2016  ·  7Comentários  ·  Fonte: swagger-api/swagger-codegen

Descrição

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

Versão Swagger-codegen

2.2.1 - estava funcionando em 2.1.6

Conteúdo ou url do arquivo de declaração Swagger

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

Linha de comando usada para geração

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>
Passos para reproduzir

Clone e crie https://github.com/tadhgpearson/swagger-maven-plugin-dependencies
Estou usando Java 8 e Maven 3.3

Assuntos relacionados

Talvez # 3261?

Sugira uma correção

O comportamento sugere que o padrão agora é usar GSON + OK HTTP - talvez seja aí que está o bug?

Question Swagger Codegen Maven Plugin

Todos 7 comentários

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

Esta página foi útil?
0 / 5 - 0 avaliações