плагин gradle использует более старую / другую версию библиотеки Java, использованной в коде - PullRequest
2 голосов
/ 25 октября 2019

Я хочу использовать swagger-gradle-plugin из проекта swagger-core для преобразования моего JAX-RS api в OpenApiDefinition.

Теперь мойПроблема в том, что плагин использует библиотеку com.fasterxml.jackson.core:jackson-databind в версии 2.9.10. Мой проект также использует эту библиотеку, но в версии 2.10.0. Теперь, когда я запускаю задачу разрешения плагина, я получаю VerifyError, потому что класс был изменен. Я уже открыл проблему на github, но проблема, кажется, заключается в моей конфигурации.

Это мой файл сборки 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")
}

1 Ответ

0 голосов
/ 25 октября 2019

Есть несколько способов обойти это, но я думаю, что самый простой способ - создать новую конфигурацию, которая будет расширяться от той, которую вы используете, но со стратегией разрешения, которая навязывает конкретную версию Джексона. Это может выглядеть так:

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, который вы использовали, так как я ожидаю, что другой был просто попыткой сделать этоработать (вы, вероятно, не хотите, чтобы тестовые ресурсы попадали в основные ресурсы).

...