MRoose
@MRoose
Застал эпоху исчезновения 3.5 мм mini-jack

Maven и устаревшие зависимости. Как задать нужную версию?

Всем привет.
На работе есть крупный многолетний сервис на Java 11 и Spring Boot 2.1
В очередной доработке надо было начать ходить в другие сервисы, интеграции в которые ранее не было.
Выбрал между RestTemplate и WebClient последний в виду его актуальности.

Локально поднять рабочий проект та еще задача - собрать все БД и системы куда уже он ходит и ждать пока выдадут сетевые доступы.
Для ускорения разработки создал свой новый локальный проект, протестировал и перенес новый код в рабочий проект сервиса.
И вот тут при компиляции вылез сюрприз - некоторые функции следующих классов помечались как несуществующие :
  • import org.springframework.http.HttpHeaders; (артифакт spring-web)
  • import reactor.netty.http.client.HttpClient; (артифакт reactor-netty)


Сразу выполнил :
  • mvn clean
  • переподтянул зависимости проекта
  • mvn install
  • очистил кеш Intellij IDEA с выгрузкой проекта и рестартом IDE

Ничего из этого не помогло.

Для использования WebClient необходимо подключить единственный артифакт spring-boot-starter-webflux.
Но оказалось, автоматически подтягиваются артифакты :
  • spring-webflux
  • reactor-netty


Когда сравнил версию этих артифактов (в тч spring-web) в рабочем проекте и моем тестовом - они различались, в моем проекте версии были на порядок выше.
Предположил, что это из-за того, что под артифактом spring-boot-starter-webflux явно не указана версия и подтягивается старая исходя как-то из немного устаревшего spring-boot-starter-parent.
Явно указал в pom-е последнюю версию spring-boot-starter-webflux - не помогло, spring-webflux и reactor-netty в зависимостях оставались устаревшими.

Артифакты spring-web, spring-webflux и reactor-netty нигде в проекте ни в одном pom-е не заданы.
Задал их явно с указанием последних версий и проект после этого успешно скомпилировался.

На инфраструктуре компании сервис еще раз прогнался на тесты, собрался образ Docker и начался процесс установки на сервер.
И тут опять ошибка про отсутствие используемых функций в двух классах, ранее упомянутых.
Я не понимаю как Maven подтягивает старую версию артифактов когда задана уже конкретная версия в pom.xml
Задал версии в pom-е в скобках (н-р. [0.0.7] вместо 0.0.7) - тоже не помогло.

Может быть кто-то уже сталкивался с подобным или знает как иначе можно заставить Maven тянуть последнии/указанные версии артифактов?
Спасибо
  • Вопрос задан
  • 522 просмотра
Решения вопроса 1
BorLaze
@BorLaze
Java developer
Попробуй исключить обновленные модули из спринговых зависимостей.
Примерно так:
<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.apache.tomcat</groupId>
                    <artifactId>tomcat-jdbc</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.hibernate</groupId>
                    <artifactId>hibernate-core</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.hibernate</groupId>
                    <artifactId>hibernate-entitymanager</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы