Клиент, сгенерированный swagger codegen и ошибкой ClassNotFoundException во время выполнения - PullRequest
0 голосов
/ 29 января 2019

Я пытался использовать swagger-клиент, сгенерированный swagger codegen, для связи с другим сервисом в моем приложении для весенней загрузки, но я получаю ошибку ClassNotFoundException во время выполнения.

Если я предоставляю пропущенныйзависимость от файла Gradle, я получаю еще одну аналогичную ошибку (еще ClassNotFoundException).Снова и снова:

  • java.lang.ClassNotFoundException: okio.Source
  • java.lang.ClassNotFoundException: com.squareup.okhttp.Callback
  • java.lang.ClassNotFoundException: com.google.gson.JsonParseException
  • java.lang.ClassNotFoundException: org.threeten.bp.temporal.TemporalAccessor
  • java.lang.ClassNotFoundException: io.gsonfire.GsonFireBuilder

Наконец, если я предоставлю все необходимые зависимости, это сработает.Количество ошибок зависит от способа генерации кода клиента swagger.Я покажу вам один из них.


Шаги для воспроизведения:

Команда для генерации кода клиента:

java -jar swagger-codegen-cli-2.3.1.jar generate -i spec.yaml -l java -o java

Затем я запустил gradle build команда для получения JAR с кодом клиента.Путь к сгенерированному JAR-файлу, который я поместил в свой файл Gradle (см. compile files(...):

plugins {
    id 'org.springframework.boot' version '2.1.2.RELEASE'
}

apply plugin: 'java'
apply plugin: 'groovy'
apply plugin: 'war'
apply plugin: 'idea'
apply plugin: 'io.spring.dependency-management'

group 'test'
version '1.0'

sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8

repositories {
    mavenCentral()
}

ext {
    springBootVersion = '2.1.2.RELEASE'
    lombokVersion = '1.18.4'
    groovyVersion = '2.5.5'
    spockVersion = '1.2-groovy-2.5'
    spockReportsVersion = '1.6.1'
    swaggerVersion = '2.9.2'
}

dependencies {
    providedRuntime("org.springframework.boot:spring-boot-starter-tomcat")
    implementation("org.springframework.boot:spring-boot-starter-web")
    implementation("org.codehaus.groovy:groovy-all:${groovyVersion}")
    compile files('/codegen/java/build/libs/swagger-java-client-1.0.0.jar')
    compileOnly("org.projectlombok:lombok:${lombokVersion}")
    testCompileOnly("org.projectlombok:lombok:${lombokVersion}")
    annotationProcessor("org.projectlombok:lombok:${lombokVersion}")
    testAnnotationProcessor("org.projectlombok:lombok:${lombokVersion}")
    testImplementation("org.springframework.boot:spring-boot-starter-test")
    testImplementation("org.spockframework:spock-core:${spockVersion}")
    testImplementation("org.spockframework:spock-spring:${spockVersion}")
    testImplementation("com.athaydes:spock-reports:${spockReportsVersion}") {
        transitive = false // this avoids affecting your version of Groovy/Spock
    }
}

У вас есть идеи, что я делаю неправильно и как решить эту проблему? Я делаюЯ не понимаю этого. Как я понимаю, все необходимые зависимости включены в сгенерированный клиентский jar-файл swagger (может, я ошибаюсь?). По некоторым причинам, если я хочу использовать этот jar-файл в моем загрузочном приложении Spring, Spring не видит этих зависимостей., которые используются в клиентском банке swagger во время выполнения.

...