gradle插件使用代码中使用的Java库的旧版本/不同版本

问题描述 投票:2回答:1

我想使用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")
}
java gradle swagger version libraries
1个回答
0
投票

有几种解决方法,但我认为最简单的方法是创建一个新配置,该配置从您正在使用的配置扩展而来,但采用的解决方案策略强制使用特定版本的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,因为我希望另一个仅是使其正常工作的一种尝试(您可能不希望测试资源渗入到主要资源)。

© www.soinside.com 2019 - 2024. All rights reserved.