Сборка Maven не выполняется после обновления зависимости Spring

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

Я работаю над уязвимостями и обновил версию spring-webmvc до 6.1.13, чтобы решить их

Вот мой pom (опущены зависимости, которые не важны в данном контексте)

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.1.12</version>
        <relativePath/> <!-- поиск родителя в репозитории -->
    </parent>

    <properties>
        <jvm.options>-Dspring.profiles.active=stage</jvm.options>
        <version.spock>2.3-groovy-3.0</version.spock>
        <version.groovy>3.0.9</version.groovy>

        <spring-security.version>6.2.7</spring-security.version>
        <spring-webflux.version>6.1.13</spring-webflux.version>
        <spring-webmvc.version>6.1.13</spring-webmvc.version>
    </properties>

    <dependencyManagement>
        <dependencies>
            <!-- CVE-2024-38816 -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-webflux</artifactId>
                <version>${spring-webflux.version}</version>
            </dependency>
            <!-- CVE-2024-38816 -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-webmvc</artifactId>
                <version>${spring-webmvc.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-tomcat</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <!-- ДОБАВЛЕНО ДЛЯ РАБОТЫ ВАЛИДАЦИИ -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-validation</artifactId>
        </dependency>

         <!--Spock 3 работает в Junit5, НО мы еще не готовы, поэтому нужно заставить его вернуться к Junit4 -->
        <dependency>
            <groupId>org.spockframework</groupId>
            <artifactId>spock-junit4</artifactId>
            <version>${version.spock}</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.mockito</groupId>
            <artifactId>mockito-inline</artifactId>
            <version>${mockito.core.version}</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.codehaus.groovy</groupId>
            <artifactId>groovy</artifactId>
            <scope>test</scope>
            <version>${version.groovy}</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.codehaus.groovy/groovy-all -->
        <dependency>
            <groupId>org.codehaus.groovy</groupId>
            <artifactId>groovy-json</artifactId>
            <scope>test</scope>
            <version>${version.groovy}</version>
        </dependency>
        <dependency>
            <groupId>org.codehaus.groovy</groupId>
            <artifactId>groovy-datetime</artifactId>
            <scope>test</scope>
            <version>${version.groovy}</version>
        </dependency>
        <dependency>
            <groupId>org.spockframework</groupId>
            <artifactId>spock-spring</artifactId>
            <version>${version.spock}</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

После выполнения mvn clean package, я получаю следующую ошибку

Не удалось выполнить цель org.codehaus.gmavenplus:gmavenplus-plugin:1.13.1:compileTests (по умолчанию) в проекте a-services: Произошла ошибка при вызове метода на классе Groovy из classpath.: InvocationTargetException: org.springframework.web.method.annotation.HandlerMethodValidationException -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Не удалось выполнить цель org.codehaus.gmavenplus:gmavenplus-plugin:1.13.1:compileTests (по умолчанию) в проекте a-services: Произошла ошибка при вызове метода на классе Groovy из classpath.

Вот конфигурация плагина gmaven

         <plugin>
                <groupId>org.codehaus.gmavenplus</groupId>
                <artifactId>gmavenplus-plugin</artifactId>
                <version>1.13.1</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>addTestSources</goal>
                            <goal>compileTests</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <sources>
                        <source>
                            <directory>${project.basedir}/src/main/java</directory>
                            <includes>
                                <include>**/*.groovy</include>
                            </includes>
                        </source>
                    </sources>
                    <testSources>
                        <testSource>
                            <directory>${project.basedir}/src/test/java</directory>
                            <includes>
                                <include>**/*.groovy</include>
                            </includes>
                        </testSource>
                    </testSources>
                </configuration>
            </plugin>

Я пытался обновить плагин gmavenplus до новых версий, но он все равно выдает ту же ошибку.
Мне нужно обновить groovy или какие-либо другие зависимости, чтобы соответствовать версии 6.1.13 spring-webmvc?

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

Проблема, с которой вы столкнулись после обновления зависимости spring-webmvc до версии 6.1.13, может быть вызвана несколькими факторами. Прежде всего, важно отметить, что при обновлении библиотек, особенно таких, как Spring Framework, необходимо учитывать совместимость с другими зависимостями, используемыми в проекте, включая Groovy, а также со сторонними библиотеками, такими как gmavenplus-plugin.

Анализ проблемы

Ошибка, которую вы получаете, следующая:

Failed to execute goal org.codehaus.gmavenplus:gmavenplus-plugin:1.13.1:compileTests (default) on project a-services: Error occurred while calling a method on a Groovy class from classpath.: InvocationTargetException: org.springframework.web.method.annotation.HandlerMethodValidationException

Это указывает на проблему во время компиляции тестов с использованием плагина gmavenplus. Конкретная причина — HandlerMethodValidationException, что часто свидетельствует о том, что где-то в коде присутствует ошибка валидации во время обработки методов контроллера.

Рекомендуемые действия

  1. Совместимость версий:

    • Spring 6.1.13 требует, чтобы все используемые библиотеки были совместимы с этим релизом. Убедитесь, что версия Groovy, используемая в вашем проекте, соответствует этой версии Spring. Рекомендуется использовать более новую версию Groovy, как минимум 4.x, так как более ранние версии могут не поддерживать функциональность нового Spring.
  2. Обновление зависимостей:

    • Проверьте, какие версии других зависимостей не обновлены. Например, spring-security должен быть обновлен до версии, совместимой с Spring 6.1.13 (хотя у вас уже стоит 6.2.7, что подходит).
    • Возможно, вам также потребуется обновить библиотеку mockito или spock, чтобы предотвратить конфликты с новыми версиями Spring.
  3. Обновление плагина gmavenplus:

    • Вы упомянули, что уже пробовали обновлять gmavenplus-plugin, но стоит отметить, что совместимые версии с использованием Groovy и Spring могут варьироваться. Попробуйте протестировать последние стабильные версии, например, 1.14.0 или выше.
  4. Проверка кода и конфигураций:

    • Поскольку ошибка связана с HandlerMethodValidationException, проверьте, не возникли ли изменения в методах контроллеров, которые могли бы нарушить валидацию. Убедитесь, что все аннотации валидации корректны и соответствуют новому API Spring.
    • Также проверьте, нет ли конфликтов в аннотациях контроллера, и что все необходимые зависимости указаны.
  5. Логи и отладка:

    • Включите подробный логирование Maven, добавив -X к вашей команде mvn clean package. Это может дать больше информации о происхождении проблемы.
    • Рассмотрите возможность локального уменьшения версии spring-webmvc до предыдущей, чтобы проверить, является ли это причиной ошибки.

Заключение

Решение проблемы, связанной с модуляцией и валидацией в случае обновления Spring, требует тщательной проработки совместимости всех зависимостей. Оптимизация версий библиотек, тестирование и анализ кода помогут найти источник ошибки HandlerMethodValidationException. Рекомендуется следовать приведенным выше шагам и тщательно проверять каждую область, которая может влиять на совместимость. Успехов в устранении проблемы!

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

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