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
2.2.1 - es funktionierte in 2.1.6
https://github.com/amadeus-travel-innovation-sandbox/sandbox-content/blob/master/swagger.yml
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>
Klonen und erstellen Sie https://github.com/tadhgpearson/swagger-maven-plugin-dependencies
Ich benutze Java 8 & Maven 3.3
Vielleicht # 3261?
Das Verhalten deutet darauf hin, dass die Standardeinstellung jetzt GSON + OK HTTP verwendet - vielleicht liegt dort der Fehler?
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