Сборка Maven завершается с ошибкой компиляции для приложения Spring Boot после 29 сентября 2024 года.

Вопрос или проблема

Я начал замечать очень странное поведение в spring-boot 2.5.3 после 29 сентября 2024 года.

У меня есть база кода, которая зависит от spring-boot 2.5.3, и ниже приведён список зависимостей, связанных со spring:

spring-cloud-starter-contract-stub-runner
spring-boot-starter-test
spring-cloud-starter-sleuth
spring-cloud-starter-contract-stub-runner
spring-boot-starter-web
springdoc-openapi-maven-plugin
spring-cloud-starter-openfeign
spring-boot-starter-validation
springdoc-openapi-webmvc-core

Начиная с указанной даты, я заметил, что все мои CI задания завершаются с ошибкой компиляции без изменений в коде, получая следующее:

[ERROR]package org.springframework.cloud.openfeign does not exist
[ERROR] <class-full-path> cannot find symbol
                                 symbol: class FeignClient

Я проводил всевозможные отладочные работы для maven:

mvn dependency:tree -Dverbose > dep6.tree
mvn dependency:go-offline > dep.offline

#собрать код с пустым репозиторием m2 и с отладочным логированием
mvn clean package -Dmaven.repo.local=./empty-m2 -DskipTests -X

Я был абсолютно уверен, что это проблема зависимости или репозитория maven, но я не смог найти подсказку или указание.

Короче;
некоторые зависимости зависели от репозитория под названием -> https://maven.restlet.org/, но этот репозиторий больше не действителен и указывает на веб-сайт https://restlet.talend.com/.

Мне пришлось обновить мой settings.xml так, чтобы он выглядел примерно так, чтобы я мог переопределить все отчеты и вернуться к https://repo.maven.apache.org/maven2/:

<settings>
    <mirrors>
        <mirror>
            <id>central-only</id>
            <mirrorOf>*</mirrorOf>
            <url>https://repo.maven.apache.org/maven2/</url>
        </mirror>
    </mirrors>
</settings>

Детали и шаги воспроизведения:

  • Сравнил логи CI из журнала действий github для успешной сборки 2 месяца назад с тем, что я получаю во время проблемы.
  • После очень долгого сравнения и отладки, я нашел следующие строки логов, появляющиеся в последних сборках (с ошибками) и отсутствующие в старых (хороших).
[WARNING] Checksum validation failed, expected <!doctype but is a0023349b1f10ff1457077b4f4f49f7015c00b6a from maven-restlet for https://maven.restlet.org/org/springframework/security/spring-security-bom/<version>/spring-security-bom-<version>.pom

[WARNING] The POM for org.springframework.cloud:spring-cloud-starter-contract-stub-runner:jar:<version> is invalid, transitive dependencies (if any) will not be available: 17 problems were encountered while building the effective model for org.springframework.cloud:spring-cloud-starter-contract-stub-runner:<version>
        [FATAL] Non-parseable POM /app/./empty-m2/com/datastax/oss/java-driver-bom/4.9.0/java-driver-bom-4.9.0.pom: unexpected markup <!d (position: START_DOCUMENT seen <!d... @1:3)  @ /app/./empty-m2/com/datastax/oss/java-driver-bom/<version>/java-driver-bom-<version>.pom, line 1, column 3
        [FATAL] Non-parseable POM /app/./empty-m2/org/codehaus/groovy/groovy-bom/<version></version>>/groovy-bom-<version></version>>.pom: unexpected markup <!d (position: START_DOCUMENT seen <!d... @1:3)  @ /app/./empty-m2/org/codehaus/groovy/groovy-bom/<version></version>>/groovy-bom-<version></version>>.pom, line 1, column 3
        [FATAL] Non-parseable POM /app/./empty-m2/org/infinispan/infinispan-bom/<version></version>>.Final/infinispan-bom-<version></version>>.Final.pom: unexpected markup <!d (position: START_DOCUMENT seen <!d... @1:3)  @ /app/./empty-m2/org/infinispan/infinispan-bom/<version></version>>.Final/infinispan-bom-<version></version>>.Final.pom, line 1, column 3

На этом этапе было вполне логично, что код не компилируется из-за того, что много зависимостей maven не удалось разрешить, отсюда и ошибка компиляции.

Как видно из приведённых выше логов, множество файлов pom не разрешаются в действительный структурированный файл pom, а разрешаются в обычную HTML-страницу.

После применения зеркального отображения maven в settings.xml всё вернулось в норму, надеюсь, это сэкономит время другим.

Ответ или решение

Вопрос: Ошибка сборки Maven в приложении Spring Boot после 29 сентября 2024 года

С недавним ухудшением работы ваших CI-процессов и возникновением ошибок компиляции в проекте на Spring Boot 2.5.3, стоит обратить внимание на несколько ключевых моментов, которые могут вызвать подобные проблемы.

Причина проблемы

Начиная с 29 сентября 2024 года, возникли перебои в работе некоторых зависимостей, используемых в вашем проекте. В частности, вы упомянули зависимость, которая ссылается на репозиторий maven.restlet.org. К сожалению, этот репозиторий больше не работает должным образом и перенаправляет на веб-сайт, что вызвало сбой в разрешении зависимостей. Ваша команда столкнулась с следующими ошибками:

[ERROR]package org.springframework.cloud.openfeign does not exist
[ERROR] <class-full-path> cannot find symbol
                                 symbol: class FeignClient

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

Устранение проблемы

  1. Проверка зависимостей: Проведите детальный анализ зависимостей проекта, используя команды Maven:

    mvn dependency:tree -Dverbose > dep6.tree
    mvn dependency:go-offline > dep.offline
  2. Очистка локального репозитория: Убедитесь, что проблема не связана с поврежденными файлами в локальном репозитории Maven, создав новый пустой репозиторий и пытаясь выполнить сборку:

    mvn clean package -Dmaven.repo.local=./empty-m2 -DskipTests -X
  3. Настройка mirrors: Наилучшим решением для вашей ситуации является переопределение репозиториев в settings.xml для перенаправления всех запросов на центральный репозиторий Maven. Пример правильной конфигурации может выглядеть следующим образом:

    <settings>
        <mirrors>
            <mirror>
                <id>central-only</id>
                <mirrorOf>*</mirrorOf>
                <url>https://repo.maven.apache.org/maven2/</url>
            </mirror>
        </mirrors>
    </settings>

Устранение неполадок

При анализе журналов CI вам следует сравнить недавние ошибки со старыми успешными сборками, что поможет выявить изменения в поведении сборки. В вашем случае, вы успешно заметили предупреждения о ненадежных POM-файлах и проблемах с контрольными суммами.

Вот некоторые ключевые сообщения об ошибках:

[WARNING] Checksum validation failed...
[FATAL] Non-parseable POM...

Эти сообщения указывают на то, что Maven пытается получить файлы POM, но получает вместо них HTML-страницы вместо ожидаемого XML-формата.

Заключение

После внесения изменений в файл settings.xml и перенаправления всех запросов на Maven Central, ваш проект должен восстановить правильное разрешение зависимостей, и ошибка компиляции будет устранена. Если проблемы продолжаются, рекомендуется проверить другие зависимости и репозитории, на которые могут ссылаться пакеты в вашем проекте.

Надеюсь, это поможет вам решать подобные проблемы в будущем. Если у вас возникнут дополнительные вопросы или потребуется помощь, не стесняйтесь обращаться.

Оцените материал
Добавить комментарий

Капча загружается...