Swagger-codegen: [Java] Vom Maven-Plugin generierter Code kann nicht erstellt werden

Erstellt am 30. Nov. 2016  ·  7Kommentare  ·  Quelle: swagger-api/swagger-codegen

Beschreibung

Ich verwende das Maven-Plugin, um Java-Code zu generieren. Nach der Generierung erhalte ich Fehler beim Kompilieren des generierten Codes wie:

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

Ich bin überrascht, weil ich _Jersey Client 1.18 erwarte. JSON-Verarbeitung: Jackson 2.4.2_ soll verwendet werden, wie in der Readme-Datei dokumentiert - warum brauche ich GSON oder OKIO? In diesem Fall kann ich nicht finden, welche Abhängigkeiten ich hinzufügen müsste, um dieses Problem zu beheben. Ich verwende die Beispiele in der Dokumentation zum Swagger-Maven-Plugin, aber der Build schlägt immer noch fehl

Swagger-Codegen-Version

2.2.1 - es funktionierte in 2.1.6

Inhalt oder URL der Swagger-Deklarationsdatei

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

Befehlszeile zur Generierung

Codegen config

                        <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>

Abhängigkeiten und Eigenschaften

<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>
Schritte zum Reproduzieren

Klonen und erstellen Sie https://github.com/tadhgpearson/swagger-maven-plugin-dependencies
Ich benutze Java 8 & Maven 3.3

Verwandte Themen

Vielleicht # 3261?

Schlagen Sie eine Lösung vor

Das Verhalten deutet darauf hin, dass die Standardeinstellung jetzt GSON + OK HTTP verwendet - vielleicht liegt dort der Fehler?

Question Swagger Codegen Maven Plugin

Alle 7 Kommentare

Aha - der Hinweis ist in JavaClientCodegen:56 der in # 3919 aktualisiert wurde

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");

Wenn Sie dies als Standard beibehalten möchten (ich bevorzuge Jackson / Jersey, aber das ist nur meine kleine Meinung), müssen die Maven-Codegen-Beispiele aktualisiert werden, und die Dokumentation sollte mir sagen, wie ich jetzt das aufrufen kann, was früher das war Standardoption (ist das jersey1 ?)

OK - Ich habe es geschafft, dieses Problem durch Durchsuchen des Codes zu beheben, und die obige Pull-Anforderung zum Aktualisieren der Dokumentation bereitgestellt. Hoffentlich hilft das!

Ich habe kürzlich von 2.1.6 auf 2.2.1 aktualisiert, da ich die neue Funktion "templateDirectory" benötigte, die in 2.2.1 funktioniert. aber sobald ich das getan habe, bekomme ich die gleichen konformeren Fehler. Wie haben Sie das gelöst? Hilfe!

Gibt es eine Möglichkeit, Jersy weiterhin zu verwenden und die neue Standard-GSON-Bibliothek zu ignorieren?

@aparnarus : Verwenden Sie den Schalter jersey1 , wie in der Readme- Datei dokumentiert.

Danke! Ich bin mir nicht sicher, wie ich es verpasst habe - aber ja, das hat funktioniert.

@aparnarus : Verwenden Sie den Schalter jersey1 , wie in der Readme- Datei dokumentiert.

<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>

es hat sich für mich gelöst

Danke schön

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen