gradle 插件使用代码中使用的 java 库的 older/different 版本
gradle plugin uses a older/different version of a java library used in the code
我想使用 swagger-gradle-plugin from the swagger-core 项目将我的 JAX-RS api 解析为 OpenApiDefinition。
现在我的问题是插件使用了版本 2.9.10
中的库 com.fasterxml.jackson.core:jackson-databind
。我的项目也使用这个库,但是版本 2.10.0
。现在,当我 运行 插件的解析任务时,我得到 VerifyError
因为 class 已更改。我已经在 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
,因为我预计另一个只是尝试使其工作(您可能不会不希望测试资源渗入主要资源)。
我想使用 swagger-gradle-plugin from the swagger-core 项目将我的 JAX-RS api 解析为 OpenApiDefinition。
现在我的问题是插件使用了版本 2.9.10
中的库 com.fasterxml.jackson.core:jackson-databind
。我的项目也使用这个库,但是版本 2.10.0
。现在,当我 运行 插件的解析任务时,我得到 VerifyError
因为 class 已更改。我已经在 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
,因为我预计另一个只是尝试使其工作(您可能不会不希望测试资源渗入主要资源)。