Несколько недель назад я начал новый проект, в котором мне было предложено использовать Spring HATEOAS. Ну, я думал, что это будет действительно просто реализовать. На самом деле так оно и есть, поскольку весенние проекты хорошо документированы. Чего я не ожидал, так это того, что Spring Fox 2.9.2 и Spring HATEOAS 2+ несовместимы. Это связано с тем, что Spring Fox использует ядро плагина Spring (ВЕРСИЯ 1.2.0), в то время как Spring HATEOAS использует более новый.
В поисках решения я смог найти следующую проблему в репозитории Spring Fox github:
Привет,
Я использую swagger 2 2.9.2, spring boot 2.2.0.M4, Hateos 0.25.1.РЕЛИЗ. Ниже приведена ошибка во время выполнения, которую я получаю:
Была предпринята попытка вызвать метод, которого не существует. Попытка была предпринята из следующего места:
springfox.documentation.spring.web.plugins.DocumentationPluginsManager.createContextBuilder(DocumentationPluginsManager.java:152)
” Следующего метода не существовало:
org.springframework.plugin.core.PluginRegistry.getPluginFor(Ljava/lang/Object;Lorg/springframework/plugin/core/Plugin;)Lorg/springframework/plugin/core/Plugin;
Класс метода, org.springframework.plugin.core. Реестр плагинов доступен в следующих местах:
jar:file:/C:/Users/EKHTJHD/.gradle/caches/modules-2/files-2.1/org.springframework.plugin/spring-plugin-core/2.0.0.M1/189f78af81f23eef12018a4d4cf50b8a6df8ec0d/spring-plugin-core-2.0.0.M1.jar!/org/springframework/plugin/core/PluginRegistry.class
Он был загружен из следующего места:
file:/C:/Users/EKHTJHD/.gradle/caches/modules-2/files-2.1/org.springframework.plugin/spring-plugin-core/2.0.0.M1/189f78af81f23eef12018a4d4cf50b8a6df8ec0d/spring-plugin-core-2.0.0.M1.jar
Действие: Исправьте путь к классам вашего приложения, чтобы оно содержало единую совместимую версию org.springframework.plugin.core. Реестр плагинов
“
Ниже приведена моя конфигурация gradle:
плагины { идентификатор ‘org.springframework.boot’ версия ‘2.2.0.M4’//идентификатор ‘ org.springframework.boot’ версия ‘2.1.6.РЕЛИЗ’ идентификатор ‘java’ }
применить плагин: ‘io.spring.управление зависимостями’
группа
конфигурации { путь К Классам среды выполнения Только Для разработки { распространяется Только На разработку } }
репозитории { MavenCentral() maven { url ‘ https://repo.spring.io/snapshot ‘ } maven { url ‘ https://repo.spring.io/milestone ‘ } }
зависимости {//реализация ‘org.springframework.boot:spring-boot-starter-data-jpa’ реализация ‘org.springframework.boot:spring-boot-starter-web’ группа компиляции: ‘org.springframework.hateoas’, имя: ‘spring-hateoas’, версия: ‘0.25.1.РЕЛИЗ’ группа компиляции: ‘io.springfox’, имя: ‘springfox-swagger2’, версия: ‘2.9.2’ группа компиляции: ‘io.springfox ‘, имя: ‘springfox-swagger-ui’, версия: ‘2.9.2’//Только для разработки ‘org.springframework.boot:spring-boot-devtools’ Только для выполнения ‘база данных com.h2:h2’ Реализация(‘org.springframework.boot:spring-boot-starter-тест’) { исключить группу: ‘org.junit.vintage’, модуль: ‘junit-винтажный движок’ исключить группу: ‘junit’, модуль: ‘junit’ } }
тест { используйте платформу JUnit() }
Если я изменю версию spring boot, как показано ниже, проблема исчезнет.
идентификатор ‘org.springframework.boot’ версия ‘2.1.6.РЕЛИЗ’
Однако я использую gradle, который имеет свои собственные правила управления зависимостями. В связи с этим фактом мы должны принудительно загрузить зависимость, как показано ниже:
скомпилировать(“org.springframework.плагин:ядро spring-плагина:1.2.0.РЕЛИЗ”) { }
После добавления зависимости проект еще не смог запуститься, даже не начавшись. Мне пришлось провести дополнительные поиски, чтобы исправить это. В конце мне пришлось переопределить компонент “обнаруживает” из Spring HATEOAS с помощью моей собственной реализации в моем проекте.
Только после этого я смог успешно использовать Spring Fox и Spring HATEOAS вместе. Я создал этот пост, чтобы упростить задачу другим разработчикам, которые ищут решение той же проблемы. Надеюсь, это будет кому-то полезно.
Оригинал: “https://dev.to/otaviotarelhodb/how-to-use-springfox-2-9-2-with-spring-hateoas-2-on-gradle-project-6mn”