我一直在尝试使用由swagger代码生成的swagger客户端与我的spring boot应用程序中的另一个服务进行通信,但是我在运行时收到一个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
最后,如果我提供了所有必要的依赖项,它将起作用。错误的数量取决于生成摇摇欲坠的客户端代码的方式。我将向您展示其中之一。
生成客户端代码的命令:
java -jar swagger-codegen-cli-2.3.1.jar generate -i spec.yaml -l java -o java
然后,我运行了gradle build
命令以获取带有客户端代码的 JAR 。我已放入gradle文件中的生成JAR的路径(请查看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
}
}
您是否知道我做错了什么以及如何解决此问题?我不明白。据我了解,所有必需的依赖项都包含在生成的swagger客户端jar中(也许我错了吗?)。由于某些原因,如果我想在Spring Boot应用程序中使用此jar,则spring在运行时不会看到在swagger客户端jar中使用的这些依赖项。