我想使用swagger-gradle-plugin项目中的swagger-core将我的JAX-RS api解析为OpenApiDefinition。
现在,我的问题是,插件使用版本com.fasterxml.jackson.core:jackson-databind
中的库2.9.10
。我的项目也使用此库,但版本为2.10.0
。现在,当我运行插件的resolve任务时,我得到了VerifyError
,因为更改了一个类。我已经在github上打开了issue,但问题似乎出在我的配置上。
这是我的gradle构建文件:
plugins {
id "io.swagger.core.v3.swagger-gradle-plugin" version "2.0.10"
}
dependencies {
...
implementation 'io.swagger.core.v3:swagger-annotations:2.0.10'
implementation "com.fasterxml.jackson.core:jackson-databind:2.10.0"
implementation "com.fasterxml.jackson.core:jackson-annotations:2.10.0"
...
}
resolve {
outputFileName = 'lcapi'
outputFormat = 'YAML'
prettyPrint = 'TRUE'
classpath = sourceSets.test.runtimeClasspath
resourcePackages = ['com.example.lc.api']
resourceClasses = ['com.example.lc.api.LcRestController', 'com.example.lc.api.LcStateController']
outputPath = file("${project.projectDir}/src/main/resources")
}
有几种解决方法,但我认为最简单的方法是创建一个新配置,该配置从您正在使用的配置扩展而来,但采用的解决方案策略强制使用特定版本的Jackson。它可能看起来像这样:
plugins {
id "io.swagger.core.v3.swagger-gradle-plugin" version "2.0.10"
}
configurations {
swagger {
extendsFrom runtimeClasspath
resolutionStrategy {
force 'com.fasterxml.jackson.core:jackson-databind:2.9.10'
force 'com.fasterxml.jackson.core:jackson-annotations:2.9.10'
}
}
}
dependencies {
implementation 'io.swagger.core.v3:swagger-annotations:2.0.10'
implementation "com.fasterxml.jackson.core:jackson-databind:2.10.0"
implementation "com.fasterxml.jackson.core:jackson-annotations:2.10.0"
// ...
}
resolve {
classpath = sourceSets.main.output + configurations.swagger
// ...
}
[请注意,我使它使用的是普通的runtimeClasspath
,而不是您所使用的testRuntimeClasspath
,因为我希望另一个仅是使其正常工作的一种尝试(您可能不希望测试资源渗入到主要资源)。